comparison pidgin/gtkutils.c @ 31816:917c597beb97

Add pidgin_make_scrollable and use it. Cleans up a bunch of duplicate code. Net code loss of 180 lines. Fixes #13073. committer: John Bailey <rekkanoryo@rekkanoryo.org>
author Gabriel Schulhof <nix@go-nix.ca>
date Sat, 08 Jan 2011 03:45:42 +0000
parents 695b6e57e255
children 17a4b32f4d46
comparison
equal deleted inserted replaced
31815:d169a587901f 31816:917c597beb97
243 g_signal_connect_swapped(G_OBJECT(toolbar), "show", G_CALLBACK(gtk_widget_show), sep); 243 g_signal_connect_swapped(G_OBJECT(toolbar), "show", G_CALLBACK(gtk_widget_show), sep);
244 g_signal_connect_swapped(G_OBJECT(toolbar), "hide", G_CALLBACK(gtk_widget_hide), sep); 244 g_signal_connect_swapped(G_OBJECT(toolbar), "hide", G_CALLBACK(gtk_widget_hide), sep);
245 gtk_widget_show(sep); 245 gtk_widget_show(sep);
246 } 246 }
247 247
248 sw = gtk_scrolled_window_new(NULL, NULL);
249 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
250 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
251 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
252 gtk_widget_show(sw);
253
254 imhtml = gtk_imhtml_new(NULL, NULL); 248 imhtml = gtk_imhtml_new(NULL, NULL);
255 gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable); 249 gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable);
256 gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE); 250 gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE);
257 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR); 251 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR);
258 #ifdef USE_GTKSPELL 252 #ifdef USE_GTKSPELL
265 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), imhtml); 259 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), imhtml);
266 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default"); 260 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default");
267 } 261 }
268 pidgin_setup_imhtml(imhtml); 262 pidgin_setup_imhtml(imhtml);
269 263
270 gtk_container_add(GTK_CONTAINER(sw), imhtml); 264 sw = pidgin_make_scrollable(imhtml, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_NONE, -1, -1);
265 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
271 266
272 if (imhtml_ret != NULL) 267 if (imhtml_ret != NULL)
273 *imhtml_ret = imhtml; 268 *imhtml_ret = imhtml;
274 269
275 if (editable && (toolbar_ret != NULL)) 270 if (editable && (toolbar_ret != NULL))
3490 purple_debug_error("winpidgin", "Error iterating HKEY_CLASSES_ROOT subkeys: %ld\n", 3485 purple_debug_error("winpidgin", "Error iterating HKEY_CLASSES_ROOT subkeys: %ld\n",
3491 ret); 3486 ret);
3492 } 3487 }
3493 #endif 3488 #endif
3494 3489
3490 GtkWidget *
3491 pidgin_make_scrollable(GtkWidget *child, GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy, GtkShadowType shadow_type, int width, int height)
3492 {
3493 GtkWidget *sw = gtk_scrolled_window_new(NULL, NULL);
3494
3495 if (G_LIKELY(sw)) {
3496 gtk_widget_show(sw);
3497 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), hscrollbar_policy, vscrollbar_policy);
3498 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), shadow_type);
3499 if (width != -1 || height != -1)
3500 gtk_widget_set_size_request(sw, width, height);
3501 if (child) {
3502 if (GTK_WIDGET_GET_CLASS(child)->set_scroll_adjustments_signal)
3503 gtk_container_add(GTK_CONTAINER(sw), child);
3504 else
3505 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), child);
3506 }
3507 return sw;
3508 }
3509
3510 return child;
3511 }
3512
3495 void pidgin_utils_init(void) 3513 void pidgin_utils_init(void)
3496 { 3514 {
3497 gtk_imhtml_class_register_protocol("http://", url_clicked_cb, link_context_menu); 3515 gtk_imhtml_class_register_protocol("http://", url_clicked_cb, link_context_menu);
3498 gtk_imhtml_class_register_protocol("https://", url_clicked_cb, link_context_menu); 3516 gtk_imhtml_class_register_protocol("https://", url_clicked_cb, link_context_menu);
3499 gtk_imhtml_class_register_protocol("ftp://", url_clicked_cb, link_context_menu); 3517 gtk_imhtml_class_register_protocol("ftp://", url_clicked_cb, link_context_menu);