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