Mercurial > pidgin.yaz
diff 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 |
line wrap: on
line diff
--- a/pidgin/gtkutils.c Sat Jan 08 03:28:41 2011 +0000 +++ b/pidgin/gtkutils.c Sat Jan 08 03:45:42 2011 +0000 @@ -245,12 +245,6 @@ gtk_widget_show(sep); } - sw = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); - gtk_widget_show(sw); - imhtml = gtk_imhtml_new(NULL, NULL); gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable); gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE); @@ -267,7 +261,8 @@ } pidgin_setup_imhtml(imhtml); - gtk_container_add(GTK_CONTAINER(sw), imhtml); + sw = pidgin_make_scrollable(imhtml, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC, GTK_SHADOW_NONE, -1, -1); + gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); if (imhtml_ret != NULL) *imhtml_ret = imhtml; @@ -3492,6 +3487,29 @@ } #endif +GtkWidget * +pidgin_make_scrollable(GtkWidget *child, GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy, GtkShadowType shadow_type, int width, int height) +{ + GtkWidget *sw = gtk_scrolled_window_new(NULL, NULL); + + if (G_LIKELY(sw)) { + gtk_widget_show(sw); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), hscrollbar_policy, vscrollbar_policy); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), shadow_type); + if (width != -1 || height != -1) + gtk_widget_set_size_request(sw, width, height); + if (child) { + if (GTK_WIDGET_GET_CLASS(child)->set_scroll_adjustments_signal) + gtk_container_add(GTK_CONTAINER(sw), child); + else + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), child); + } + return sw; + } + + return child; +} + void pidgin_utils_init(void) { gtk_imhtml_class_register_protocol("http://", url_clicked_cb, link_context_menu);