plugins/docklet/eggtrayicon.c

Wed, 01 Dec 2004 01:17:19 +0000

author
Scott Shedden
date
Wed, 01 Dec 2004 01:17:19 +0000
changeset 10282
055f7b0e0f43
parent 8735
01248ea222d3
child 10779
553d127bb300
permissions
-rw-r--r--

[gaim-migrate @ 11451]
Patch from Scott Shedden to have the blist hidden when Gaim starts.

This actually probably won't work for most people currently, because
on X11, the docklet is added asynchrously, so we usually won't realize the
docklet exists until we've already created the blist. I'm sure there
must be some way around this, though (Scott's solution was to manually hide
the buddy list when the docklet was finally embedded. I may fall back on
that).

committer: Sean Egan <seanegan@pidgin.im>

3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
2 /* eggtrayicon.c
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
3 * Copyright (C) 2002 Anders Carlsson <andersca@gnu.org>
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
4 *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
9 *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
13 * Lesser General Public License for more details.
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
14 *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
16 * License along with this library; if not, write to the
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
18 * Boston, MA 02111-1307, USA.
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
19 */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
20
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
21 #include <string.h>
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
22 #include <gdk/gdkx.h>
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
23 #include "eggtrayicon.h"
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
24
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
25 #define SYSTEM_TRAY_REQUEST_DOCK 0
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
26 #define SYSTEM_TRAY_BEGIN_MESSAGE 1
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
27 #define SYSTEM_TRAY_CANCEL_MESSAGE 2
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
28
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
29 static GtkPlugClass *parent_class = NULL;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
30
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
31 static void egg_tray_icon_init (EggTrayIcon *icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
32 static void egg_tray_icon_class_init (EggTrayIconClass *klass);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
33
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
34 static void egg_tray_icon_unrealize (GtkWidget *widget);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
35
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
36 static void egg_tray_icon_update_manager_window (EggTrayIcon *icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
37
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
38 GType
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
39 egg_tray_icon_get_type (void)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
40 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
41 static GType our_type = 0;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
42
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
43 our_type = g_type_from_name("EggTrayIcon");
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
44
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
45 if (our_type == 0)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
46 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
47 static const GTypeInfo our_info =
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
48 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
49 sizeof (EggTrayIconClass),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
50 (GBaseInitFunc) NULL,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
51 (GBaseFinalizeFunc) NULL,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
52 (GClassInitFunc) egg_tray_icon_class_init,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
53 NULL, /* class_finalize */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
54 NULL, /* class_data */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
55 sizeof (EggTrayIcon),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
56 0, /* n_preallocs */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
57 (GInstanceInitFunc) egg_tray_icon_init
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
58 };
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
59
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
60 our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
61 }
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
62 else if (parent_class == NULL) {
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
63 /* we're reheating the old class from a previous instance - engage ugly hack =( */
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
64 egg_tray_icon_class_init((EggTrayIconClass *)g_type_class_peek(our_type));
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
65 }
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
66
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
67 return our_type;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
68 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
69
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
70 static void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
71 egg_tray_icon_init (EggTrayIcon *icon)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
72 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
73 icon->stamp = 1;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
74
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
75 gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
76 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
77
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
78 static void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
79 egg_tray_icon_class_init (EggTrayIconClass *klass)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
80 {
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
81 GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
82
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
83 parent_class = g_type_class_peek_parent (klass);
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
84
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
85 widget_class->unrealize = egg_tray_icon_unrealize;
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
86 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
87
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
88 static GdkFilterReturn
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
89 egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_data)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
90 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
91 EggTrayIcon *icon = user_data;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
92 XEvent *xev = (XEvent *)xevent;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
93
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
94 if (xev->xany.type == ClientMessage &&
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
95 xev->xclient.message_type == icon->manager_atom &&
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
96 xev->xclient.data.l[1] == icon->selection_atom)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
97 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
98 egg_tray_icon_update_manager_window (icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
99 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
100 else if (xev->xany.window == icon->manager_window)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
101 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
102 if (xev->xany.type == DestroyNotify)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
103 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
104 egg_tray_icon_update_manager_window (icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
105 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
106 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
107
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
108 return GDK_FILTER_CONTINUE;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
109 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
110
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
111 static void
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
112 egg_tray_icon_unrealize (GtkWidget *widget)
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
113 {
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
114 EggTrayIcon *icon = EGG_TRAY_ICON (widget);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
115 GdkWindow *root_window;
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
116
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
117 if (icon->manager_window != None)
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
118 {
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
119 GdkWindow *gdkwin;
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
120
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
121 #if HAVE_GTK_MULTIHEAD
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
122 gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
123 icon->manager_window);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
124 #else
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
125 gdkwin = gdk_window_lookup (icon->manager_window);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
126 #endif
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
127
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
128 gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
129 }
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
130
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
131 #if HAVE_GTK_MULTIHEAD
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
132 root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
133 #else
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
134 root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
135 #endif
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
136
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
137 gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
138
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
139 if (GTK_WIDGET_CLASS (parent_class)->unrealize)
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
140 (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
141 }
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
142
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
143 static void
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
144 egg_tray_icon_send_manager_message (EggTrayIcon *icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
145 long message,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
146 Window window,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
147 long data1,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
148 long data2,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
149 long data3)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
150 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
151 XClientMessageEvent ev;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
152 Display *display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
153
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
154 ev.type = ClientMessage;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
155 ev.window = window;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
156 ev.message_type = icon->system_tray_opcode_atom;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
157 ev.format = 32;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
158 ev.data.l[0] = gdk_x11_get_server_time (GTK_WIDGET (icon)->window);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
159 ev.data.l[1] = message;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
160 ev.data.l[2] = data1;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
161 ev.data.l[3] = data2;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
162 ev.data.l[4] = data3;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
163
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
164 #if HAVE_GTK_MULTIHEAD
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
165 display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
166 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
167 display = gdk_display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
168 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
169
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
170 gdk_error_trap_push ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
171 XSendEvent (display,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
172 icon->manager_window, False, NoEventMask, (XEvent *)&ev);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
173 XSync (display, False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
174 gdk_error_trap_pop ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
175 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
176
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
177 static void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
178 egg_tray_icon_send_dock_request (EggTrayIcon *icon)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
179 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
180 egg_tray_icon_send_manager_message (icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
181 SYSTEM_TRAY_REQUEST_DOCK,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
182 icon->manager_window,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
183 gtk_plug_get_id (GTK_PLUG (icon)),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
184 0, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
185 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
186
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
187 static void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
188 egg_tray_icon_update_manager_window (EggTrayIcon *icon)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
189 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
190 Display *xdisplay;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
191
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
192 #if HAVE_GTK_MULTIHEAD
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
193 xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
194 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
195 xdisplay = gdk_display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
196 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
197
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
198 if (icon->manager_window != None)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
199 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
200 GdkWindow *gdkwin;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
201
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
202 #if HAVE_GTK_MULTIHEAD
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
203 gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
204 icon->manager_window);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
205 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
206 gdkwin = gdk_window_lookup (icon->manager_window);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
207 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
208
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
209 gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
210 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
211
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
212 XGrabServer (xdisplay);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
213
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
214 icon->manager_window = XGetSelectionOwner (xdisplay,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
215 icon->selection_atom);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
216
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
217 if (icon->manager_window != None)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
218 XSelectInput (xdisplay,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
219 icon->manager_window, StructureNotifyMask);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
220
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
221 XUngrabServer (xdisplay);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
222 XFlush (xdisplay);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
223
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
224 if (icon->manager_window != None)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
225 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
226 GdkWindow *gdkwin;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
227
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
228 #if HAVE_GTK_MULTIHEAD
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
229 gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
230 icon->manager_window);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
231 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
232 gdkwin = gdk_window_lookup (icon->manager_window);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
233 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
234
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
235 gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
236
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
237 /* Send a request that we'd like to dock */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
238 egg_tray_icon_send_dock_request (icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
239 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
240 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
241
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
242 EggTrayIcon *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
243 egg_tray_icon_new_for_xscreen (Screen *xscreen, const char *name)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
244 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
245 EggTrayIcon *icon;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
246 char buffer[256];
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
247 GdkWindow *root_window;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
248
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
249 g_return_val_if_fail (xscreen != NULL, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
250
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
251 icon = g_object_new (EGG_TYPE_TRAY_ICON, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
252 gtk_window_set_title (GTK_WINDOW (icon), name);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
253
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
254 #if HAVE_GTK_MULTIHEAD
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
255 /* FIXME: this code does not compile, screen is undefined. Now try
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
256 * getting the GdkScreen from xscreen (:. Dunno how to solve this
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 4261
diff changeset
257 * (there is probably some easy way I cant think of right now)
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
258 */
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
259 gtk_plug_construct_for_display (GTK_PLUG (icon),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
260 gdk_screen_get_display (screen), 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
261 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
262 gtk_plug_construct (GTK_PLUG (icon), 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
263 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
264
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
265 gtk_widget_realize (GTK_WIDGET (icon));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
266
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
267 /* Now see if there's a manager window around */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
268 g_snprintf (buffer, sizeof (buffer),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
269 "_NET_SYSTEM_TRAY_S%d",
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
270 XScreenNumberOfScreen (xscreen));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
271
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
272 icon->selection_atom = XInternAtom (DisplayOfScreen (xscreen),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
273 buffer, False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
274
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
275 icon->manager_atom = XInternAtom (DisplayOfScreen (xscreen),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
276 "MANAGER", False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
277
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
278 icon->system_tray_opcode_atom = XInternAtom (DisplayOfScreen (xscreen),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
279 "_NET_SYSTEM_TRAY_OPCODE", False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
280
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
281 egg_tray_icon_update_manager_window (icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
282
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
283 #if HAVE_GTK_MULTIHEAD
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
284 root_window = gdk_screen_get_root_window (gtk_widget_get_screen (screen));
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
285 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
286 root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
287 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
288
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
289 /* Add a root window filter so that we get changes on MANAGER */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
290 gdk_window_add_filter (root_window,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
291 egg_tray_icon_manager_filter, icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
292
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
293 return icon;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
294 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
295
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
296 #if HAVE_GTK_MULTIHEAD
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
297 EggTrayIcon *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
298 egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
299 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
300 EggTrayIcon *icon;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
301 char buffer[256];
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
302
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
303 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
304
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
305 return egg_tray_icon_new_for_xscreen (GDK_SCREEN_XSCREEN (screen), name);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
306 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
307 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
308
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
309 EggTrayIcon*
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
310 egg_tray_icon_new (const gchar *name)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
311 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
312 return egg_tray_icon_new_for_xscreen (DefaultScreenOfDisplay (gdk_display), name);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
313 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
314
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
315 guint
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
316 egg_tray_icon_send_message (EggTrayIcon *icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
317 gint timeout,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
318 const gchar *message,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
319 gint len)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
320 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
321 guint stamp;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
322
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
323 g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
324 g_return_val_if_fail (timeout >= 0, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
325 g_return_val_if_fail (message != NULL, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
326
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
327 if (icon->manager_window == None)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
328 return 0;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
329
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
330 if (len < 0)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
331 len = strlen (message);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
332
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
333 stamp = icon->stamp++;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
334
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
335 /* Get ready to send the message */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
336 egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
337 (Window)gtk_plug_get_id (GTK_PLUG (icon)),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
338 timeout, len, stamp);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
339
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
340 /* Now to send the actual message */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
341 gdk_error_trap_push ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
342 while (len > 0)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
343 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
344 XClientMessageEvent ev;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
345 Display *xdisplay;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
346
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
347 #if HAVE_GTK_MULTIHEAD
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
348 xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
349 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
350 xdisplay = gdk_display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
351 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
352
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
353 ev.type = ClientMessage;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
354 ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
355 ev.format = 8;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
356 ev.message_type = XInternAtom (xdisplay,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
357 "_NET_SYSTEM_TRAY_MESSAGE_DATA", False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
358 if (len > 20)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
359 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
360 memcpy (&ev.data, message, 20);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
361 len -= 20;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
362 message += 20;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
363 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
364 else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
365 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
366 memcpy (&ev.data, message, len);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
367 len = 0;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
368 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
369
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
370 XSendEvent (xdisplay,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
371 icon->manager_window, False, StructureNotifyMask, (XEvent *)&ev);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
372 XSync (xdisplay, False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
373 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
374 gdk_error_trap_pop ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
375
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
376 return stamp;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
377 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
378
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
379 void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
380 egg_tray_icon_cancel_message (EggTrayIcon *icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
381 guint id)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
382 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
383 g_return_if_fail (EGG_IS_TRAY_ICON (icon));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
384 g_return_if_fail (id > 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
385
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
386 egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
387 (Window)gtk_plug_get_id (GTK_PLUG (icon)),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
388 id, 0, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
389 }

mercurial