Mercurial > pidgin.yaz
annotate plugins/docklet/docklet-x11.c @ 10765:80b8be10dc42
[gaim-migrate @ 12370]
This makes the system tray icon transparent on linux.
Try sticking this in your ~/.gtkrc-2.0 to test it with:
style "background-color"
{
bg[NORMAL] = "#FF00FF"
bg[ACTIVE] = "#FF00FF"
bg[SELECTED] = "#FF0000"
}
widget_class "*" style "background-color"
One problem is the icon has a shadow thats probably just a little more
gradual than needed. causing things to look funny. It might be
better than nothing though. And if now we can revert it.
So people play with this and decide if it sucks or not.
committer: Tailor Script <tailor@pidgin.im>
author | Tim Ringenbach <marv@pidgin.im> |
---|---|
date | Fri, 01 Apr 2005 23:16:50 +0000 |
parents | 77ef3f2f0df8 |
children | 4e64283bf3cb |
rev | line source |
---|---|
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
1 /* |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
2 * System tray icon (aka docklet) plugin for Gaim |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
3 * |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
4 * Copyright (C) 2002-3 Robert McQueen <robot101@debian.org> |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
5 * Copyright (C) 2003 Herman Bloggs <hermanator12002@yahoo.com> |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
6 * Inspired by a similar plugin by: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
7 * John (J5) Palmieri <johnp@martianrock.com> |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
8 * |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
9 * This program is free software; you can redistribute it and/or |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
10 * modify it under the terms of the GNU General Public License as |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
11 * published by the Free Software Foundation; either version 2 of the |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
12 * License, or (at your option) any later version. |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
13 * |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
14 * This program is distributed in the hope that it will be useful, but |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
15 * WITHOUT ANY WARRANTY; without even the implied warranty of |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
17 * General Public License for more details. |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
18 * |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
19 * You should have received a copy of the GNU General Public License |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
20 * along with this program; if not, write to the Free Software |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
21 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
22 * 02111-1307, USA. |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
23 */ |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
24 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
25 #include "internal.h" |
9791 | 26 #include "gtkgaim.h" |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
27 #include "debug.h" |
10297
ec140184437b
[gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents:
10268
diff
changeset
|
28 #include "gtkstock.h" |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
29 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
30 #include "gaim.h" |
9709 | 31 #include "gtkdialogs.h" |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
32 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
33 #include "eggtrayicon.h" |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
34 #include "docklet.h" |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
35 |
10491 | 36 #define EMBED_TIMEOUT 3000 |
37 | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
38 /* globals */ |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
39 static EggTrayIcon *docklet = NULL; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
40 static GtkWidget *image = NULL; |
6894
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
41 static GdkPixbuf *blank_icon = NULL; |
10491 | 42 static int embed_timeout = 0; |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
43 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
44 /* protos */ |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
45 static void docklet_x11_create(); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
46 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
47 static gboolean |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
48 docklet_x11_create_cb() |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
49 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
50 docklet_x11_create(); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
51 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
52 return FALSE; /* for when we're called by the glib idle handler */ |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
53 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
54 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
55 static void |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
56 docklet_x11_embedded_cb(GtkWidget *widget, void *data) |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
57 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
58 gaim_debug(GAIM_DEBUG_INFO, "tray icon", "embedded\n"); |
10491 | 59 |
60 g_source_remove(embed_timeout); | |
61 embed_timeout = 0; | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
62 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
63 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
64 static void |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
65 docklet_x11_destroyed_cb(GtkWidget *widget, void *data) |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
66 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
67 gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
68 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
69 docklet_remove(TRUE); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
70 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
71 g_object_unref(G_OBJECT(docklet)); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
72 docklet = NULL; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
73 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
74 g_idle_add(docklet_x11_create_cb, &handle); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
75 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
76 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
77 static void |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
78 docklet_x11_clicked_cb(GtkWidget *button, GdkEventButton *event, void *data) |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
79 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
80 if (event->type != GDK_BUTTON_PRESS) |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
81 return; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
82 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
83 docklet_clicked(event->button); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
84 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
85 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
86 static void |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
87 docklet_x11_update_icon(enum docklet_status icon) |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
88 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
89 const gchar *icon_name = NULL; |
10765 | 90 GdkPixbuf *p; |
91 GdkBitmap *mask = NULL; | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
92 |
10504 | 93 g_return_if_fail(image != NULL); |
94 | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
95 switch (icon) { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
96 case offline: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
97 icon_name = GAIM_STOCK_ICON_OFFLINE; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
98 break; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
99 case offline_connecting: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
100 case online_connecting: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
101 icon_name = GAIM_STOCK_ICON_CONNECT; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
102 break; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
103 case online: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
104 icon_name = GAIM_STOCK_ICON_ONLINE; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
105 break; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
106 case online_pending: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
107 icon_name = GAIM_STOCK_ICON_ONLINE_MSG; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
108 break; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
109 case away: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
110 icon_name = GAIM_STOCK_ICON_AWAY; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
111 break; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
112 case away_pending: |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
113 icon_name = GAIM_STOCK_ICON_AWAY_MSG; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
114 break; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
115 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
116 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
117 gtk_image_set_from_stock(GTK_IMAGE(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); |
10765 | 118 p = gtk_widget_render_icon(GTK_WIDGET(image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR, NULL); |
119 | |
120 if (p && (gdk_pixbuf_get_colorspace(p) == GDK_COLORSPACE_RGB) && (gdk_pixbuf_get_bits_per_sample(p) == 8) | |
121 && (gdk_pixbuf_get_has_alpha(p)) && (gdk_pixbuf_get_n_channels(p) == 4)) { | |
122 int len = gdk_pixbuf_get_width(p) * gdk_pixbuf_get_height(p); | |
123 guchar *data = gdk_pixbuf_get_pixels(p); | |
124 guchar *bitmap = g_malloc((len / 8) + 1); | |
125 int i; | |
126 | |
127 for (i = 0; i < len; i++) | |
128 if ((data[i*4] != 0) || (data[i*4 + 1] != 0) || (data[i*4 + 2] != 0) || (data[i*4 + 3] != 0)) | |
129 bitmap[i/8] |= 1 << i % 8; | |
130 else | |
131 bitmap[i/8] &= ~(1 << i % 8); | |
132 | |
133 mask = gdk_bitmap_create_from_data(GDK_DRAWABLE(GTK_WIDGET(image)->window), bitmap, gdk_pixbuf_get_width(p), gdk_pixbuf_get_height(p)); | |
134 g_free(bitmap); | |
135 } | |
136 | |
137 if (mask) | |
138 gdk_window_shape_combine_mask(image->window, mask, 0, 0); | |
139 | |
140 g_object_unref(G_OBJECT(p)); | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
141 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
142 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
143 static void |
6894
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
144 docklet_x11_blank_icon() |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
145 { |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
146 if (!blank_icon) { |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
147 gint width, height; |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
148 |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
149 gtk_icon_size_lookup(GTK_ICON_SIZE_LARGE_TOOLBAR, &width, &height); |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
150 blank_icon = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, width, height); |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
151 gdk_pixbuf_fill(blank_icon, 0); |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
152 } |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
153 |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
154 gtk_image_set_from_pixbuf(GTK_IMAGE(image), blank_icon); |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
155 } |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
156 |
10505 | 157 #if GTK_CHECK_VERSION(2,2,0) |
6894
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
158 static void |
10268
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
159 docklet_x11_position_menu(GtkMenu *menu, int *x, int *y, gboolean *push_in, |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
160 gpointer user_data) |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
161 { |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
162 GtkWidget *widget = GTK_WIDGET(docklet); |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
163 GtkRequisition req; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
164 gint menu_xpos, menu_ypos; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
165 |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
166 gtk_widget_size_request(GTK_WIDGET(menu), &req); |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
167 gdk_window_get_origin(widget->window, &menu_xpos, &menu_ypos); |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
168 |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
169 menu_xpos += widget->allocation.x; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
170 menu_ypos += widget->allocation.y; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
171 |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
172 if (menu_ypos > gdk_screen_get_height(gtk_widget_get_screen(widget)) / 2) |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
173 menu_ypos -= req.height; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
174 else |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
175 menu_ypos += widget->allocation.height; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
176 |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
177 *x = menu_xpos; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
178 *y = menu_ypos; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
179 |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
180 *push_in = TRUE; |
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
181 } |
10505 | 182 #endif |
10268
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
183 |
10504 | 184 static void |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
185 docklet_x11_destroy() |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
186 { |
10504 | 187 g_return_if_fail(docklet != NULL); |
188 | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
189 docklet_remove(GTK_WIDGET_VISIBLE(docklet)); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
190 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
191 g_signal_handlers_disconnect_by_func(G_OBJECT(docklet), G_CALLBACK(docklet_x11_destroyed_cb), NULL); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
192 gtk_widget_destroy(GTK_WIDGET(docklet)); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
193 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
194 g_object_unref(G_OBJECT(docklet)); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
195 docklet = NULL; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
196 |
6894
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
197 if (blank_icon) |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
198 g_object_unref(G_OBJECT(blank_icon)); |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
199 blank_icon = NULL; |
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
200 |
10504 | 201 image = NULL; |
202 | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
203 gaim_debug(GAIM_DEBUG_INFO, "tray icon", "destroyed\n"); |
10504 | 204 } |
205 | |
206 static gboolean | |
207 docklet_x11_embed_timeout_cb() | |
208 { | |
209 docklet_unload(); | |
210 | |
10491 | 211 return FALSE; |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
212 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
213 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
214 static void |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
215 docklet_x11_create() |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
216 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
217 GtkWidget *box; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
218 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
219 if (docklet) { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
220 /* if this is being called when a tray icon exists, it's because |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
221 something messed up. try destroying it before we proceed, |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
222 although docklet_refcount may be all hosed. hopefully won't happen. */ |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
223 gaim_debug(GAIM_DEBUG_WARNING, "tray icon", "trying to create icon but it already exists?\n"); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
224 docklet_x11_destroy(); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
225 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
226 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
227 docklet = egg_tray_icon_new("Gaim"); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
228 box = gtk_event_box_new(); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
229 image = gtk_image_new(); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
230 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
231 g_signal_connect(G_OBJECT(docklet), "embedded", G_CALLBACK(docklet_x11_embedded_cb), NULL); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
232 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_x11_destroyed_cb), NULL); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
233 g_signal_connect(G_OBJECT(box), "button-press-event", G_CALLBACK(docklet_x11_clicked_cb), NULL); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
234 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
235 gtk_container_add(GTK_CONTAINER(box), image); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
236 gtk_container_add(GTK_CONTAINER(docklet), box); |
9229 | 237 |
238 if(!gtk_check_version(2,4,0)) | |
239 g_object_set(G_OBJECT(box), "visible-window", FALSE, NULL); | |
240 | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
241 gtk_widget_show_all(GTK_WIDGET(docklet)); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
242 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
243 /* ref the docklet before we bandy it about the place */ |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
244 g_object_ref(G_OBJECT(docklet)); |
10491 | 245 docklet_embedded(); |
10504 | 246 embed_timeout = g_timeout_add(EMBED_TIMEOUT, docklet_x11_embed_timeout_cb, NULL); |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
247 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
248 gaim_debug(GAIM_DEBUG_INFO, "tray icon", "created\n"); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
249 } |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
250 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
251 static struct docklet_ui_ops ui_ops = |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
252 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
253 docklet_x11_create, |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
254 docklet_x11_destroy, |
6894
c2fb9192377b
[gaim-migrate @ 7441]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
6371
diff
changeset
|
255 docklet_x11_update_icon, |
10268
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
256 docklet_x11_blank_icon, |
10505 | 257 #if GTK_CHECK_VERSION(2,2,0) |
10268
d082b2a71ee7
[gaim-migrate @ 11414]
Christian Hammond <chipx86@chipx86.com>
parents:
9791
diff
changeset
|
258 docklet_x11_position_menu |
10505 | 259 #else |
260 NULL | |
261 #endif | |
6209
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
262 }; |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
263 |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
264 void |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
265 docklet_ui_init() |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
266 { |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
267 docklet_set_ui_ops(&ui_ops); |
dd715b02df41
[gaim-migrate @ 6695]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
diff
changeset
|
268 } |