| 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; |
| 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); |