plugins/docklet/eggtrayicon.c

Tue, 14 Feb 2006 05:43:43 +0000

author
Richard Laager <rlaager@pidgin.im>
date
Tue, 14 Feb 2006 05:43:43 +0000
changeset 13281
3558cb15ebb9
parent 12600
7ecd4441fdc7
child 14231
bdae40bccd7f
permissions
-rw-r--r--

[gaim-migrate @ 15646]
Always show a vertical scrollbar on conversations imhtmls. This will solve the shrinking conversation window bug. I chose this approach instead of saving the size of the window (as I had previous talked about), as this prevents the contents of the scrollback from rewrapping when the scrollbars appear or disappear. It also just seems to feel like the right thing to do, but maybe that's me being lazy.

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
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
21 #include <config.h>
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
22 #include <string.h>
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
23
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
24 #include "eggtrayicon.h"
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
25
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
26 #include <gdk/gdkx.h>
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
27 #include <X11/Xatom.h>
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
28
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
29 #define _(x) x
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
30 #define N_(x) x
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
31
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
32 #define SYSTEM_TRAY_REQUEST_DOCK 0
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
33 #define SYSTEM_TRAY_BEGIN_MESSAGE 1
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
34 #define SYSTEM_TRAY_CANCEL_MESSAGE 2
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
35
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
36 #define SYSTEM_TRAY_ORIENTATION_HORZ 0
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
37 #define SYSTEM_TRAY_ORIENTATION_VERT 1
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
38
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
39 enum {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
40 PROP_0,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
41 PROP_ORIENTATION
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
42 };
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
43
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
44 static GtkPlugClass *parent_class = NULL;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
45
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
46 static void egg_tray_icon_init (EggTrayIcon *icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
47 static void egg_tray_icon_class_init (EggTrayIconClass *klass);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
48
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
49 static void egg_tray_icon_get_property (GObject *object,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
50 guint prop_id,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
51 GValue *value,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
52 GParamSpec *pspec);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
53
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
54 static void egg_tray_icon_realize (GtkWidget *widget);
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
55 static void egg_tray_icon_unrealize (GtkWidget *widget);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
56
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
57 static void egg_tray_icon_update_manager_window (EggTrayIcon *icon,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
58 gboolean dock_if_realized);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
59 static void egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
60
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
61 GType
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
62 egg_tray_icon_get_type (void)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
63 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
64 static GType our_type = 0;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
65
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
66 if (our_type == 0)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
67 {
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
68 our_type = g_type_from_name("EggTrayIcon");
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
69
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
70 if (our_type == 0)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
71 {
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
72 static const GTypeInfo our_info =
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
73 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
74 sizeof (EggTrayIconClass),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
75 (GBaseInitFunc) NULL,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
76 (GBaseFinalizeFunc) NULL,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
77 (GClassInitFunc) egg_tray_icon_class_init,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
78 NULL, /* class_finalize */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
79 NULL, /* class_data */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
80 sizeof (EggTrayIcon),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
81 0, /* n_preallocs */
12600
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 11291
diff changeset
82 (GInstanceInitFunc) egg_tray_icon_init,
7ecd4441fdc7 [gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents: 11291
diff changeset
83 NULL /* value_table */
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
84 };
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
85
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
86 our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
87 }
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
88 else if (parent_class == NULL)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
89 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
90 /* we're reheating the old class from a previous instance - engage ugly hack =( */
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
91 egg_tray_icon_class_init((EggTrayIconClass *)g_type_class_peek(our_type));
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
92 }
3510
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
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
95 return our_type;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
96 }
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 static void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
99 egg_tray_icon_init (EggTrayIcon *icon)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
100 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
101 icon->stamp = 1;
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
102 icon->orientation = GTK_ORIENTATION_HORIZONTAL;
3510
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 gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);
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 static void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
108 egg_tray_icon_class_init (EggTrayIconClass *klass)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
109 {
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
110 GObjectClass *gobject_class = (GObjectClass *)klass;
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
111 GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
112
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
113 parent_class = g_type_class_peek_parent (klass);
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
114
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
115 gobject_class->get_property = egg_tray_icon_get_property;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
116
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
117 widget_class->realize = egg_tray_icon_realize;
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
118 widget_class->unrealize = egg_tray_icon_unrealize;
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
119
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
120 g_object_class_install_property (gobject_class,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
121 PROP_ORIENTATION,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
122 g_param_spec_enum ("orientation",
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
123 _("Orientation"),
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
124 _("The orientation of the tray."),
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
125 GTK_TYPE_ORIENTATION,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
126 GTK_ORIENTATION_HORIZONTAL,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
127 G_PARAM_READABLE));
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
128 }
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
129
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
130 static void
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
131 egg_tray_icon_get_property (GObject *object,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
132 guint prop_id,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
133 GValue *value,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
134 GParamSpec *pspec)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
135 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
136 EggTrayIcon *icon = EGG_TRAY_ICON (object);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
137
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
138 switch (prop_id)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
139 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
140 case PROP_ORIENTATION:
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
141 g_value_set_enum (value, icon->orientation);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
142 break;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
143 default:
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
144 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
145 break;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
146 }
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
147 }
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
148
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
149 static void
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
150 egg_tray_icon_get_orientation_property (EggTrayIcon *icon)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
151 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
152 Display *xdisplay;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
153 Atom type;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
154 int format;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
155 union {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
156 gulong *prop;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
157 guchar *prop_ch;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
158 } prop = { NULL };
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
159 gulong nitems;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
160 gulong bytes_after;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
161 int error, result;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
162
11291
5441d2419942 [gaim-migrate @ 13491]
Mark Doliner <markdoliner@pidgin.im>
parents: 10779
diff changeset
163 g_return_if_fail(icon->manager_window != None);
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
164
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
165 #if GTK_CHECK_VERSION(2,1,0)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
166 xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
167 #else
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
168 xdisplay = gdk_display;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
169 #endif
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
170
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
171 gdk_error_trap_push ();
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
172 type = None;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
173 result = XGetWindowProperty (xdisplay,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
174 icon->manager_window,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
175 icon->orientation_atom,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
176 0, G_MAXLONG, FALSE,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
177 XA_CARDINAL,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
178 &type, &format, &nitems,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
179 &bytes_after, &(prop.prop_ch));
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
180 error = gdk_error_trap_pop ();
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
181
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
182 if (error || result != Success)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
183 return;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
184
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
185 if (type == XA_CARDINAL)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
186 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
187 GtkOrientation orientation;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
188
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
189 orientation = (prop.prop [0] == SYSTEM_TRAY_ORIENTATION_HORZ) ?
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
190 GTK_ORIENTATION_HORIZONTAL :
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
191 GTK_ORIENTATION_VERTICAL;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
192
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
193 if (icon->orientation != orientation)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
194 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
195 icon->orientation = orientation;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
196
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
197 g_object_notify (G_OBJECT (icon), "orientation");
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
198 }
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
199 }
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
200
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
201 if (prop.prop)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
202 XFree (prop.prop);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
203 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
204
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
205 static GdkFilterReturn
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
206 egg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_data)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
207 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
208 EggTrayIcon *icon = user_data;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
209 XEvent *xev = (XEvent *)xevent;
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 if (xev->xany.type == ClientMessage &&
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
212 xev->xclient.message_type == icon->manager_atom &&
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
213 xev->xclient.data.l[1] == icon->selection_atom)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
214 {
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
215 egg_tray_icon_update_manager_window (icon, TRUE);
3510
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 else if (xev->xany.window == icon->manager_window)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
218 {
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
219 if (xev->xany.type == PropertyNotify &&
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
220 xev->xproperty.atom == icon->orientation_atom)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
221 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
222 egg_tray_icon_get_orientation_property (icon);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
223 }
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
224 if (xev->xany.type == DestroyNotify)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
225 {
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
226 egg_tray_icon_manager_window_destroyed (icon);
3510
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 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
229
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
230 return GDK_FILTER_CONTINUE;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
231 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
232
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
233 static void
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
234 egg_tray_icon_unrealize (GtkWidget *widget)
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
235 {
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
236 EggTrayIcon *icon = EGG_TRAY_ICON (widget);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
237 GdkWindow *root_window;
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
238
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
239 if (icon->manager_window != None)
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
240 {
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
241 GdkWindow *gdkwin;
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
242
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
243 #if GTK_CHECK_VERSION(2,1,0)
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
244 gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
245 icon->manager_window);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
246 #else
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
247 gdkwin = gdk_window_lookup (icon->manager_window);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
248 #endif
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
249
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
250 gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
251 }
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
252
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
253 #if GTK_CHECK_VERSION(2,1,0)
4261
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
254 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
255 #else
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
256 root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
257 #endif
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
258
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
259 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
260
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
261 if (GTK_WIDGET_CLASS (parent_class)->unrealize)
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
262 (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
263 }
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
264
cc35d7c0582f <Robot101> commit message:
Robert McQueen <robot101@debian.org>
parents: 3510
diff changeset
265 static void
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
266 egg_tray_icon_send_manager_message (EggTrayIcon *icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
267 long message,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
268 Window window,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
269 long data1,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
270 long data2,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
271 long data3)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
272 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
273 XClientMessageEvent ev;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
274 Display *display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
275
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
276 ev.type = ClientMessage;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
277 ev.window = window;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
278 ev.message_type = icon->system_tray_opcode_atom;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
279 ev.format = 32;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
280 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
281 ev.data.l[1] = message;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
282 ev.data.l[2] = data1;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
283 ev.data.l[3] = data2;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
284 ev.data.l[4] = data3;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
285
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
286 #if GTK_CHECK_VERSION(2,1,0)
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
287 display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
288 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
289 display = gdk_display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
290 #endif
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
291
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
292 gdk_error_trap_push ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
293 XSendEvent (display,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
294 icon->manager_window, False, NoEventMask, (XEvent *)&ev);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
295 XSync (display, False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
296 gdk_error_trap_pop ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
297 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
298
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
299 static void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
300 egg_tray_icon_send_dock_request (EggTrayIcon *icon)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
301 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
302 egg_tray_icon_send_manager_message (icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
303 SYSTEM_TRAY_REQUEST_DOCK,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
304 icon->manager_window,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
305 gtk_plug_get_id (GTK_PLUG (icon)),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
306 0, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
307 }
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 static void
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
310 egg_tray_icon_update_manager_window (EggTrayIcon *icon,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
311 gboolean dock_if_realized)
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
312 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
313 Display *xdisplay;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
314
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
315 if (icon->manager_window != None)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
316 return;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
317
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
318 #if GTK_CHECK_VERSION(2,1,0)
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
319 xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
320 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
321 xdisplay = gdk_display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
322 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
323
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
324 XGrabServer (xdisplay);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
325
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
326 icon->manager_window = XGetSelectionOwner (xdisplay,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
327 icon->selection_atom);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
328
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
329 if (icon->manager_window != None)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
330 XSelectInput (xdisplay,
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
331 icon->manager_window, StructureNotifyMask|PropertyChangeMask);
3510
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 XUngrabServer (xdisplay);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
334 XFlush (xdisplay);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
335
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
336 if (icon->manager_window != None)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
337 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
338 GdkWindow *gdkwin;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
339
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
340 #if GTK_CHECK_VERSION(2,1,0)
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
341 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
342 icon->manager_window);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
343 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
344 gdkwin = gdk_window_lookup (icon->manager_window);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
345 #endif
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
346
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
347 gdk_window_add_filter (gdkwin, egg_tray_icon_manager_filter, icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
348
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
349 if (dock_if_realized && GTK_WIDGET_REALIZED (icon))
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
350 egg_tray_icon_send_dock_request (icon);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
351
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
352 egg_tray_icon_get_orientation_property (icon);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
353 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
354 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
355
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
356 static void
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
357 egg_tray_icon_manager_window_destroyed (EggTrayIcon *icon)
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
358 {
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
359 GdkWindow *gdkwin;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
360
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
361 g_return_if_fail (icon->manager_window != None);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
362
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
363 #if GTK_CHECK_VERSION(2,1,0)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
364 gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (GTK_WIDGET (icon)),
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
365 icon->manager_window);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
366 #else
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
367 gdkwin = gdk_window_lookup (icon->manager_window);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
368 #endif
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
369
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
370 gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
371
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
372 icon->manager_window = None;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
373
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
374 egg_tray_icon_update_manager_window (icon, TRUE);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
375 }
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
376
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
377 static void
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
378 egg_tray_icon_realize (GtkWidget *widget)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
379 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
380 EggTrayIcon *icon = EGG_TRAY_ICON (widget);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
381 gint screen;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
382 Display *xdisplay;
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
383 char buffer[256];
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
384 GdkWindow *root_window;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
385
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
386 if (GTK_WIDGET_CLASS (parent_class)->realize)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
387 GTK_WIDGET_CLASS (parent_class)->realize (widget);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
388
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
389 #if GTK_CHECK_VERSION(2,1,0)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
390 screen = gdk_screen_get_number (gtk_widget_get_screen (widget));
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
391 xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (widget));
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
392 #else
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
393 screen = XScreenNumberOfScreen (DefaultScreenOfDisplay (gdk_display));
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
394 xdisplay = gdk_display;
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
395 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
396
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
397 /* Now see if there's a manager window around */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
398 g_snprintf (buffer, sizeof (buffer),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
399 "_NET_SYSTEM_TRAY_S%d",
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
400 screen);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
401
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
402 icon->selection_atom = XInternAtom (xdisplay, buffer, False);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
403
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
404 icon->manager_atom = XInternAtom (xdisplay, "MANAGER", False);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
405
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
406 icon->system_tray_opcode_atom = XInternAtom (xdisplay,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
407 "_NET_SYSTEM_TRAY_OPCODE",
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
408 False);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
409
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
410 icon->orientation_atom = XInternAtom (xdisplay,
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
411 "_NET_SYSTEM_TRAY_ORIENTATION",
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
412 False);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
413
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
414 egg_tray_icon_update_manager_window (icon, FALSE);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
415 egg_tray_icon_send_dock_request (icon);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
416
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
417 #if GTK_CHECK_VERSION(2,1,0)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
418 root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
419 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
420 root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
421 #endif
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
422
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
423 /* Add a root window filter so that we get changes on MANAGER */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
424 gdk_window_add_filter (root_window,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
425 egg_tray_icon_manager_filter, icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
426 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
427
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
428 #if GTK_CHECK_VERSION(2,1,0)
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
429 EggTrayIcon *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
430 egg_tray_icon_new_for_screen (GdkScreen *screen, const char *name)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
431 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
432 g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
433
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
434 return g_object_new (EGG_TYPE_TRAY_ICON, "screen", screen, "title", name, NULL);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
435 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
436 #endif
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
437
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
438 EggTrayIcon*
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
439 egg_tray_icon_new (const gchar *name)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
440 {
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
441 return g_object_new (EGG_TYPE_TRAY_ICON, "title", name, NULL);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
442 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
443
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
444 guint
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
445 egg_tray_icon_send_message (EggTrayIcon *icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
446 gint timeout,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
447 const gchar *message,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
448 gint len)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
449 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
450 guint stamp;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
451
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
452 g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
453 g_return_val_if_fail (timeout >= 0, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
454 g_return_val_if_fail (message != NULL, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
455
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
456 if (icon->manager_window == None)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
457 return 0;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
458
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
459 if (len < 0)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
460 len = strlen (message);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
461
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
462 stamp = icon->stamp++;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
463
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
464 /* Get ready to send the message */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
465 egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_BEGIN_MESSAGE,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
466 (Window)gtk_plug_get_id (GTK_PLUG (icon)),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
467 timeout, len, stamp);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
468
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
469 /* Now to send the actual message */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
470 gdk_error_trap_push ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
471 while (len > 0)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
472 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
473 XClientMessageEvent ev;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
474 Display *xdisplay;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
475
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
476 #if GTK_CHECK_VERSION(2,1,0)
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
477 xdisplay = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
478 #else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
479 xdisplay = gdk_display;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
480 #endif
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
481
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
482 ev.type = ClientMessage;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
483 ev.window = (Window)gtk_plug_get_id (GTK_PLUG (icon));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
484 ev.format = 8;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
485 ev.message_type = XInternAtom (xdisplay,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
486 "_NET_SYSTEM_TRAY_MESSAGE_DATA", False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
487 if (len > 20)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
488 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
489 memcpy (&ev.data, message, 20);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
490 len -= 20;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
491 message += 20;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
492 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
493 else
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
494 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
495 memcpy (&ev.data, message, len);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
496 len = 0;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
497 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
498
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
499 XSendEvent (xdisplay,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
500 icon->manager_window, False, StructureNotifyMask, (XEvent *)&ev);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
501 XSync (xdisplay, False);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
502 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
503 gdk_error_trap_pop ();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
504
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
505 return stamp;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
506 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
507
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
508 void
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
509 egg_tray_icon_cancel_message (EggTrayIcon *icon,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
510 guint id)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
511 {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
512 g_return_if_fail (EGG_IS_TRAY_ICON (icon));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
513 g_return_if_fail (id > 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
514
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
515 egg_tray_icon_send_manager_message (icon, SYSTEM_TRAY_CANCEL_MESSAGE,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
516 (Window)gtk_plug_get_id (GTK_PLUG (icon)),
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
517 id, 0, 0);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
518 }
10779
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
519
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
520 GtkOrientation
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
521 egg_tray_icon_get_orientation (EggTrayIcon *icon)
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
522 {
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
523 g_return_val_if_fail (EGG_IS_TRAY_ICON (icon), GTK_ORIENTATION_HORIZONTAL);
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
524
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
525 return icon->orientation;
553d127bb300 [gaim-migrate @ 12402]
Luke Schierer <lschiere@pidgin.im>
parents: 8735
diff changeset
526 }

mercurial