Mercurial > pidgin
comparison src/gtkblist.c @ 10015:ab342e285f3a
[gaim-migrate @ 10934]
Disable blist tooltips if the X Composite extension is present
committer: Tailor Script <tailor@pidgin.im>
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Sat, 11 Sep 2004 16:55:09 +0000 |
parents | a38881ec9c0f |
children | ef935958e84c |
comparison
equal
deleted
inserted
replaced
10014:41ef089e3df8 | 10015:ab342e285f3a |
---|---|
129 static void redo_buddy_list(GaimBuddyList *list, gboolean remove); | 129 static void redo_buddy_list(GaimBuddyList *list, gboolean remove); |
130 static void gaim_gtk_blist_collapse_contact_cb(GtkWidget *w, GaimBlistNode *node); | 130 static void gaim_gtk_blist_collapse_contact_cb(GtkWidget *w, GaimBlistNode *node); |
131 | 131 |
132 static void show_rename_group(GtkWidget *unused, GaimGroup *g); | 132 static void show_rename_group(GtkWidget *unused, GaimGroup *g); |
133 | 133 |
134 static gboolean xcomposite_is_present(); | |
135 | |
134 struct _gaim_gtk_blist_node { | 136 struct _gaim_gtk_blist_node { |
135 GtkTreeRowReference *row; | 137 GtkTreeRowReference *row; |
136 gboolean contact_expanded; | 138 gboolean contact_expanded; |
137 }; | 139 }; |
138 | 140 |
179 .960, .898, .800, .686, .333, | 181 .960, .898, .800, .686, .333, |
180 .945, .866, .737, .584, .258, | 182 .945, .866, .737, .584, .258, |
181 .941, .847, .698, .521, .215 | 183 .941, .847, .698, .521, .215 |
182 }; | 184 }; |
183 | 185 |
186 | |
187 static gboolean xcomposite_is_present() | |
188 { | |
189 static gboolean known = FALSE, result = FALSE; | |
190 int i, j, k; | |
191 | |
192 if (!known) { | |
193 /* I don't actually care about versions/etc. */ | |
194 if (XQueryExtension(GDK_DISPLAY(), "Composite", &i, &j, &k) == True) | |
195 result = TRUE; | |
196 } | |
197 | |
198 return result; | |
199 } | |
184 | 200 |
185 static GdkPixbuf * | 201 static GdkPixbuf * |
186 get_pixbuf(GtkWidget *menu, int x, int y, int width, int height) | 202 get_pixbuf(GtkWidget *menu, int x, int y, int width, int height) |
187 { | 203 { |
188 GdkPixbuf *dest, *src; | 204 GdkPixbuf *dest, *src; |
2084 g_object_unref (pixbuf); | 2100 g_object_unref (pixbuf); |
2085 g_object_unref (layout); | 2101 g_object_unref (layout); |
2086 g_free(tooltiptext); | 2102 g_free(tooltiptext); |
2087 | 2103 |
2088 #ifdef WANT_DROP_SHADOW | 2104 #ifdef WANT_DROP_SHADOW |
2089 shadow_paint(gtkblist, NULL, EAST_SIDE); | 2105 if (!xcomposite_is_present()) { |
2090 shadow_paint(gtkblist, NULL, SOUTH_SIDE); | 2106 shadow_paint(gtkblist, NULL, EAST_SIDE); |
2107 shadow_paint(gtkblist, NULL, SOUTH_SIDE); | |
2108 } | |
2091 #endif | 2109 #endif |
2092 | 2110 |
2093 return; | 2111 return; |
2094 } | 2112 } |
2095 | 2113 |
2099 return; | 2117 return; |
2100 | 2118 |
2101 gtk_widget_destroy(gtkblist->tipwindow); | 2119 gtk_widget_destroy(gtkblist->tipwindow); |
2102 gtkblist->tipwindow = NULL; | 2120 gtkblist->tipwindow = NULL; |
2103 #ifdef WANT_DROP_SHADOW | 2121 #ifdef WANT_DROP_SHADOW |
2104 gdk_window_set_user_data (gtkblist->east_shadow, NULL); | 2122 if (!xcomposite_is_present()) { |
2105 gdk_window_destroy (gtkblist->east_shadow); | 2123 gdk_window_set_user_data (gtkblist->east_shadow, NULL); |
2106 gtkblist->east_shadow = NULL; | 2124 gdk_window_destroy (gtkblist->east_shadow); |
2107 | 2125 gtkblist->east_shadow = NULL; |
2108 gdk_window_set_user_data (gtkblist->south_shadow, NULL); | 2126 |
2109 gdk_window_destroy (gtkblist->south_shadow); | 2127 gdk_window_set_user_data (gtkblist->south_shadow, NULL); |
2110 gtkblist->south_shadow = NULL; | 2128 gdk_window_destroy (gtkblist->south_shadow); |
2129 gtkblist->south_shadow = NULL; | |
2130 } | |
2111 #endif | 2131 #endif |
2112 } | 2132 } |
2113 | 2133 |
2114 static gboolean gaim_gtk_blist_tooltip_timeout(GtkWidget *tv) | 2134 static gboolean gaim_gtk_blist_tooltip_timeout(GtkWidget *tv) |
2115 { | 2135 { |
2193 g_signal_connect(G_OBJECT(gtkblist->tipwindow), "expose_event", | 2213 g_signal_connect(G_OBJECT(gtkblist->tipwindow), "expose_event", |
2194 G_CALLBACK(gaim_gtk_blist_paint_tip), node); | 2214 G_CALLBACK(gaim_gtk_blist_paint_tip), node); |
2195 gtk_widget_ensure_style (gtkblist->tipwindow); | 2215 gtk_widget_ensure_style (gtkblist->tipwindow); |
2196 | 2216 |
2197 #ifdef WANT_DROP_SHADOW | 2217 #ifdef WANT_DROP_SHADOW |
2198 attr.window_type = GDK_WINDOW_TEMP; | 2218 if (!xcomposite_is_present()) { |
2199 attr.override_redirect = TRUE; | 2219 attr.window_type = GDK_WINDOW_TEMP; |
2200 attr.x = gtkblist->tipwindow->allocation.x; | 2220 attr.override_redirect = TRUE; |
2201 attr.y = gtkblist->tipwindow->allocation.y; | 2221 attr.x = gtkblist->tipwindow->allocation.x; |
2202 attr.width = gtkblist->tipwindow->allocation.width; | 2222 attr.y = gtkblist->tipwindow->allocation.y; |
2203 attr.height = gtkblist->tipwindow->allocation.height; | 2223 attr.width = gtkblist->tipwindow->allocation.width; |
2204 attr.wclass = GDK_INPUT_OUTPUT; | 2224 attr.height = gtkblist->tipwindow->allocation.height; |
2205 attr.visual = gtk_widget_get_visual (gtkblist->window); | 2225 attr.wclass = GDK_INPUT_OUTPUT; |
2206 attr.colormap = gtk_widget_get_colormap (gtkblist->window); | 2226 attr.visual = gtk_widget_get_visual (gtkblist->window); |
2207 | 2227 attr.colormap = gtk_widget_get_colormap (gtkblist->window); |
2208 attr.event_mask = gtk_widget_get_events (gtkblist->tipwindow); | 2228 |
2209 | 2229 attr.event_mask = gtk_widget_get_events (gtkblist->tipwindow); |
2210 attr.event_mask |= (GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK | | 2230 |
2211 GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK ); | 2231 attr.event_mask |= (GDK_EXPOSURE_MASK | GDK_KEY_PRESS_MASK | |
2212 if(gtkblist->east_shadow) { | 2232 GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK ); |
2213 gdk_window_set_user_data (gtkblist->east_shadow, NULL); | 2233 if(gtkblist->east_shadow) { |
2214 gdk_window_destroy (gtkblist->east_shadow); | 2234 gdk_window_set_user_data (gtkblist->east_shadow, NULL); |
2215 } | 2235 gdk_window_destroy (gtkblist->east_shadow); |
2216 gtkblist->east_shadow = gdk_window_new(gtk_widget_get_root_window(gtkblist->tipwindow), &attr, | 2236 } |
2237 gtkblist->east_shadow = gdk_window_new(gtk_widget_get_root_window(gtkblist->tipwindow), &attr, | |
2217 GDK_WA_NOREDIR | GDK_WA_VISUAL | GDK_WA_COLORMAP); | 2238 GDK_WA_NOREDIR | GDK_WA_VISUAL | GDK_WA_COLORMAP); |
2218 gdk_window_set_user_data (gtkblist->east_shadow, gtkblist->tipwindow); | 2239 gdk_window_set_user_data (gtkblist->east_shadow, gtkblist->tipwindow); |
2219 gdk_window_set_back_pixmap (gtkblist->east_shadow, NULL, FALSE); | 2240 gdk_window_set_back_pixmap (gtkblist->east_shadow, NULL, FALSE); |
2220 | 2241 |
2221 if(gtkblist->south_shadow) { | 2242 if(gtkblist->south_shadow) { |
2222 gdk_window_set_user_data (gtkblist->south_shadow, NULL); | 2243 gdk_window_set_user_data (gtkblist->south_shadow, NULL); |
2223 gdk_window_destroy (gtkblist->south_shadow); | 2244 gdk_window_destroy (gtkblist->south_shadow); |
2224 } | 2245 } |
2225 gtkblist->south_shadow = gdk_window_new(gtk_widget_get_root_window(gtkblist->tipwindow), &attr, | 2246 gtkblist->south_shadow = gdk_window_new(gtk_widget_get_root_window(gtkblist->tipwindow), &attr, |
2226 GDK_WA_NOREDIR | GDK_WA_VISUAL | GDK_WA_COLORMAP); | 2247 GDK_WA_NOREDIR | GDK_WA_VISUAL | GDK_WA_COLORMAP); |
2227 gdk_window_set_user_data (gtkblist->south_shadow, gtkblist->tipwindow); | 2248 gdk_window_set_user_data (gtkblist->south_shadow, gtkblist->tipwindow); |
2228 gdk_window_set_back_pixmap (gtkblist->south_shadow, NULL, FALSE); | 2249 gdk_window_set_back_pixmap (gtkblist->south_shadow, NULL, FALSE); |
2250 } | |
2229 #endif | 2251 #endif |
2230 | 2252 |
2231 layout = gtk_widget_create_pango_layout (gtkblist->tipwindow, NULL); | 2253 layout = gtk_widget_create_pango_layout (gtkblist->tipwindow, NULL); |
2232 pango_layout_set_wrap(layout, PANGO_WRAP_WORD); | 2254 pango_layout_set_wrap(layout, PANGO_WRAP_WORD); |
2233 pango_layout_set_width(layout, 300000); | 2255 pango_layout_set_width(layout, 300000); |
2294 gtk_widget_set_size_request(gtkblist->tipwindow, w, h); | 2316 gtk_widget_set_size_request(gtkblist->tipwindow, w, h); |
2295 gtk_window_move(GTK_WINDOW(gtkblist->tipwindow), x, y); | 2317 gtk_window_move(GTK_WINDOW(gtkblist->tipwindow), x, y); |
2296 gtk_widget_show(gtkblist->tipwindow); | 2318 gtk_widget_show(gtkblist->tipwindow); |
2297 | 2319 |
2298 #ifdef WANT_DROP_SHADOW | 2320 #ifdef WANT_DROP_SHADOW |
2299 map_shadow_windows(gtkblist); | 2321 if (!xcomposite_is_present()) { |
2322 map_shadow_windows(gtkblist); | |
2323 } | |
2300 #endif | 2324 #endif |
2301 | 2325 |
2302 return FALSE; | 2326 return FALSE; |
2303 } | 2327 } |
2304 | 2328 |