From a2e8d9087e71c177fa5b8bbdcb6f24db6f8118f2 Mon Sep 17 00:00:00 2001 From: deepend-tildeclub Date: Wed, 30 Sep 2026 16:22:47 -0600 Subject: [PATCH] make dialog content fill available space --- plugins/fishlim/plugin_zoitechat.c | 2 ++ src/fe-gtk/ascii.c | 6 ++-- src/fe-gtk/fkeys.c | 16 +++++++++-- src/fe-gtk/gtkutil.c | 28 +++++++++++-------- src/fe-gtk/inline-image.c | 42 ++++++++++++++++++++-------- src/fe-gtk/joind.c | 1 - src/fe-gtk/maingui.c | 1 - src/fe-gtk/menu.c | 8 +++--- src/fe-gtk/notifygui.c | 17 +++++++---- src/fe-gtk/servlistgui.c | 24 +++++++++++++--- src/fe-gtk/setup.c | 22 +++++++++------ src/fe-gtk/textgui.c | 17 ++++++----- src/fe-gtk/theme/theme-preferences.c | 1 + 13 files changed, 126 insertions(+), 59 deletions(-) diff --git a/plugins/fishlim/plugin_zoitechat.c b/plugins/fishlim/plugin_zoitechat.c index bfb9d4b2..b0727898 100644 --- a/plugins/fishlim/plugin_zoitechat.c +++ b/plugins/fishlim/plugin_zoitechat.c @@ -710,6 +710,7 @@ static int handle_fishlim(char *word[], char *word_eol[], void *userdata) { gtk_box_pack_start(GTK_BOX(content), grid, TRUE, TRUE, 0); fishlim_target_entry = gtk_entry_new(); + gtk_widget_set_hexpand(fishlim_target_entry, TRUE); if (target) gtk_entry_set_text(GTK_ENTRY(fishlim_target_entry), target); gtk_grid_attach(GTK_GRID(grid), gtk_label_new("Target nick or channel"), 0, 0, 1, 1); @@ -760,6 +761,7 @@ static int handle_fishlim(char *word[], char *word_eol[], void *userdata) { g_signal_connect(view, "row-activated", G_CALLBACK(fishlim_gui_row_activated), NULL); scroll = gtk_scrolled_window_new(NULL, NULL); + gtk_widget_set_hexpand(scroll, TRUE); gtk_widget_set_vexpand(scroll, TRUE); gtk_container_add(GTK_CONTAINER(scroll), view); gtk_grid_attach(GTK_GRID(grid), scroll, 0, 6, 3, 1); diff --git a/src/fe-gtk/ascii.c b/src/fe-gtk/ascii.c index 9725480f..ed641dbb 100644 --- a/src/fe-gtk/ascii.c +++ b/src/fe-gtk/ascii.c @@ -138,7 +138,7 @@ ascii_open (void) { table_pos++; hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_container_add (GTK_CONTAINER (vbox), hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); gtk_widget_show (hbox); i++; continue; @@ -155,14 +155,14 @@ ascii_open (void) G_CALLBACK (ascii_click), NULL); g_signal_connect (G_OBJECT (but), "enter-notify-event", G_CALLBACK (ascii_enter), label); - gtk_box_pack_start (GTK_BOX (hbox), but, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (hbox), but, TRUE, TRUE, 0); gtk_widget_show (but); table_pos += len; } frame = gtk_frame_new (""); - gtk_container_add (GTK_CONTAINER (hbox), frame); + gtk_box_pack_start (GTK_BOX (hbox), frame, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (frame), label); gtk_widget_show (label); gtk_widget_show (frame); diff --git a/src/fe-gtk/fkeys.c b/src/fe-gtk/fkeys.c index 1e8e82e6..9d51e3a1 100644 --- a/src/fe-gtk/fkeys.c +++ b/src/fe-gtk/fkeys.c @@ -1221,7 +1221,7 @@ key_dialog_load (GtkListStore *store) void key_dialog_show () { - GtkWidget *vbox, *box; + GtkWidget *vbox, *box, *pane, *scroll; GtkWidget *view, *xtext, *delete_button; GtkListStore *store; XTextColor xtext_palette[XTEXT_COLS]; @@ -1237,10 +1237,20 @@ key_dialog_show () key_dialog = mg_create_generic_tab ("editkeys", buf, TRUE, FALSE, key_dialog_close, NULL, 600, 360, &vbox, 0); - view = key_dialog_treeview_new (vbox); + pane = gtk_paned_new (GTK_ORIENTATION_VERTICAL); + gtk_box_pack_start (GTK_BOX (vbox), pane, TRUE, TRUE, 0); + box = gtkutil_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 0); + gtk_paned_pack1 (GTK_PANED (pane), box, TRUE, FALSE); + view = key_dialog_treeview_new (box); + scroll = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (scroll), 80); + gtk_paned_pack2 (GTK_PANED (pane), scroll, TRUE, FALSE); + gtk_paned_set_position (GTK_PANED (pane), 220); theme_get_xtext_colors (xtext_palette, XTEXT_COLS); xtext = gtk_xtext_new (xtext_palette, 0); - gtk_box_pack_start (GTK_BOX (vbox), xtext, FALSE, TRUE, 2); + gtk_container_add (GTK_CONTAINER (scroll), xtext); gtk_xtext_set_font (GTK_XTEXT (xtext), prefs.hex_text_font); g_object_set_data (G_OBJECT (key_dialog), "view", view); diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c index 06b77348..6889838f 100644 --- a/src/fe-gtk/gtkutil.c +++ b/src/fe-gtk/gtkutil.c @@ -641,9 +641,8 @@ gtkutil_get_str (char *msg, char *def, void *callback, void *userdata, gboolean if (parent_window && GTK_IS_WINDOW (parent_window)) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent_window)); gtkutil_place_dialog (dialog); - gtk_box_set_homogeneous (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), TRUE); - hbox = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, TRUE, 0); + hbox = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 6); g_object_set_data (G_OBJECT (dialog), "cb", callback); g_object_set_data (G_OBJECT (dialog), "ud", userdata); @@ -653,7 +652,8 @@ gtkutil_get_str (char *msg, char *def, void *callback, void *userdata, gboolean G_CALLBACK (gtkutil_str_enter), dialog); gtk_entry_set_text (GTK_ENTRY (entry), def ? def : ""); gtk_entry_set_visibility (GTK_ENTRY (entry), visible); - gtk_box_pack_end (GTK_BOX (hbox), entry, 0, 0, 0); + gtk_widget_set_valign (entry, GTK_ALIGN_CENTER); + gtk_box_pack_end (GTK_BOX (hbox), entry, TRUE, TRUE, 0); label = gtk_label_new (msg); gtk_box_pack_end (GTK_BOX (hbox), label, 0, 0, 0); @@ -661,7 +661,8 @@ gtkutil_get_str (char *msg, char *def, void *callback, void *userdata, gboolean g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtkutil_get_str_response), entry); - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), hbox); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + hbox, TRUE, TRUE, 0); gtk_widget_show_all (dialog); } @@ -742,9 +743,8 @@ fe_get_int (char *msg, int def, void *callback, void *userdata) if (parent_window && GTK_IS_WINDOW (parent_window)) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent_window)); gtkutil_place_dialog (dialog); - gtk_box_set_homogeneous (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), TRUE); - hbox = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, TRUE, 0); + hbox = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 6); g_object_set_data (G_OBJECT (dialog), "cb", callback); g_object_set_data (G_OBJECT (dialog), "ud", userdata); @@ -755,7 +755,8 @@ fe_get_int (char *msg, int def, void *callback, void *userdata) gtk_adjustment_set_upper (adj, 1024); gtk_adjustment_set_step_increment (adj, 1); gtk_spin_button_set_value ((GtkSpinButton*)spin, def); - gtk_box_pack_end (GTK_BOX (hbox), spin, 0, 0, 0); + gtk_widget_set_valign (spin, GTK_ALIGN_CENTER); + gtk_box_pack_end (GTK_BOX (hbox), spin, TRUE, TRUE, 0); label = gtk_label_new (msg); gtk_box_pack_end (GTK_BOX (hbox), label, 0, 0, 0); @@ -763,7 +764,8 @@ fe_get_int (char *msg, int def, void *callback, void *userdata) g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtkutil_get_number_response), spin); - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), hbox); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + hbox, TRUE, TRUE, 0); gtk_widget_show_all (dialog); } @@ -783,17 +785,18 @@ fe_get_bool (char *title, char *prompt, void *callback, void *userdata) if (parent_window && GTK_IS_WINDOW (parent_window)) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent_window)); gtkutil_place_dialog (dialog); - gtk_box_set_homogeneous (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), TRUE); g_object_set_data (G_OBJECT (dialog), "cb", callback); g_object_set_data (G_OBJECT (dialog), "ud", userdata); prompt_label = gtk_label_new (prompt); + gtk_label_set_line_wrap (GTK_LABEL (prompt_label), TRUE); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtkutil_get_bool_response), NULL); - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), prompt_label); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + prompt_label, TRUE, TRUE, 0); gtk_widget_show_all (dialog); } @@ -885,7 +888,10 @@ gtkutil_window_new (char *title, char *role, int width, int height, int flags) gtk_window_set_wmclass (GTK_WINDOW (win), "ZoiteChat", "zoitechat"); #endif gtk_window_set_title (GTK_WINDOW (win), title); - gtk_window_set_default_size (GTK_WINDOW (win), width, height); + /* Zero means content-sized to callers; GTK requires -1 for that. */ + gtk_window_set_default_size (GTK_WINDOW (win), + width > 0 ? width : -1, + height > 0 ? height : -1); gtk_window_set_role (GTK_WINDOW (win), role); if (flags & 1) gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_MOUSE); diff --git a/src/fe-gtk/inline-image.c b/src/fe-gtk/inline-image.c index fcd66489..08bce0b7 100644 --- a/src/fe-gtk/inline-image.c +++ b/src/fe-gtk/inline-image.c @@ -1848,10 +1848,33 @@ image_viewer_button_press (GtkWidget *widget, GdkEventButton *event, return TRUE; } +static gboolean +image_viewer_draw (GtkWidget *widget, cairo_t *cr, gpointer data) +{ + GdkPixbuf *pixbuf = data; + int width = gdk_pixbuf_get_width (pixbuf); + int height = gdk_pixbuf_get_height (pixbuf); + int available_width = gtk_widget_get_allocated_width (widget); + int available_height = gtk_widget_get_allocated_height (widget); + double scale = MIN ((double) available_width / width, + (double) available_height / height); + + /* Draw from the original so repeated resizing never degrades the image. */ + cairo_save (cr); + cairo_translate (cr, (available_width - width * scale) / 2, + (available_height - height * scale) / 2); + cairo_scale (cr, scale, scale); + gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); + cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_BILINEAR); + cairo_paint (cr); + cairo_restore (cr); + return FALSE; +} + void inline_image_show_viewer (GtkXText *xtext, textentry *ent) { - GdkPixbuf *pixbuf, *scaled = NULL; + GdkPixbuf *pixbuf; GtkWidget *window, *eventbox, *image, *toplevel; const char *url; int width, height, max_width = 1280, max_height = 960; @@ -1885,18 +1908,15 @@ inline_image_show_viewer (GtkXText *xtext, textentry *ent) double scale = MIN ((double) max_width / width, (double) max_height / height); - scaled = gdk_pixbuf_scale_simple (pixbuf, - MAX (1, (int) (width * scale)), MAX (1, (int) (height * scale)), - GDK_INTERP_BILINEAR); - if (scaled) - pixbuf = scaled; + width = MAX (1, (int) (width * scale)); + height = MAX (1, (int) (height * scale)); } window = gtk_window_new (GTK_WINDOW_TOPLEVEL); url = gtk_xtext_entry_get_image_url (xtext, ent); gtk_window_set_title (GTK_WINDOW (window), url ? url : _("Image")); gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG); - gtk_window_set_resizable (GTK_WINDOW (window), FALSE); + gtk_window_set_default_size (GTK_WINDOW (window), width, height); toplevel = gtk_widget_get_toplevel (GTK_WIDGET (xtext)); if (GTK_IS_WINDOW (toplevel)) @@ -1908,7 +1928,10 @@ inline_image_show_viewer (GtkXText *xtext, textentry *ent) } eventbox = gtk_event_box_new (); - image = gtk_image_new_from_pixbuf (pixbuf); + image = gtk_drawing_area_new (); + g_object_set_data_full (G_OBJECT (image), "zoitechat-viewer-image", + g_object_ref (pixbuf), g_object_unref); + g_signal_connect (G_OBJECT (image), "draw", G_CALLBACK (image_viewer_draw), pixbuf); gtk_container_add (GTK_CONTAINER (eventbox), image); gtk_container_add (GTK_CONTAINER (window), eventbox); @@ -1918,7 +1941,4 @@ inline_image_show_viewer (GtkXText *xtext, textentry *ent) G_CALLBACK (image_viewer_button_press), window); gtk_widget_show_all (window); - - if (scaled) - g_object_unref (scaled); } diff --git a/src/fe-gtk/joind.c b/src/fe-gtk/joind.c index f1204e62..e188789c 100644 --- a/src/fe-gtk/joind.c +++ b/src/fe-gtk/joind.c @@ -137,7 +137,6 @@ joind_show_dialog (server *serv) gtk_window_set_position (GTK_WINDOW (dialog1), GTK_WIN_POS_CENTER_ON_PARENT); gtk_window_set_transient_for (GTK_WINDOW(dialog1), GTK_WINDOW(serv->front_session->gui->window)); gtk_window_set_modal (GTK_WINDOW (dialog1), TRUE); - gtk_window_set_resizable (GTK_WINDOW (dialog1), FALSE); dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (dialog1)); gtk_widget_show (dialog_vbox1); diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index b8eeb606..1805c80b 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -2330,7 +2330,6 @@ mg_open_quit_dialog (gboolean minimize_button) gtk_container_set_border_width (GTK_CONTAINER (dialog), 6); gtk_window_set_title (GTK_WINDOW (dialog), _("Quit ZoiteChat?")); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent_window)); - gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_widget_show (dialog_vbox1); diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c index 5076597e..a146a7f2 100644 --- a/src/fe-gtk/menu.c +++ b/src/fe-gtk/menu.c @@ -1595,16 +1595,16 @@ menu_join (GtkWidget * wid, gpointer none) NULL); theme_manager_attach_window (dialog); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); - gtk_box_set_homogeneous (GTK_BOX (content_area), TRUE); gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE); - hbox = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, TRUE, 0); + hbox = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 6); entry = gtk_entry_new (); gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE); /* avoid auto-selection */ gtk_entry_set_text (GTK_ENTRY (entry), "#"); g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (menu_join_entry_cb), dialog); - gtk_box_pack_end (GTK_BOX (hbox), entry, 0, 0, 0); + gtk_widget_set_valign (entry, GTK_ALIGN_CENTER); + gtk_box_pack_end (GTK_BOX (hbox), entry, TRUE, TRUE, 0); label = gtk_label_new (_("Enter Channel to Join:")); gtk_box_pack_end (GTK_BOX (hbox), label, 0, 0, 0); @@ -1612,7 +1612,7 @@ menu_join (GtkWidget * wid, gpointer none) g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (menu_join_cb), entry); - gtk_container_add (GTK_CONTAINER (content_area), hbox); + gtk_box_pack_start (GTK_BOX (content_area), hbox, TRUE, TRUE, 0); gtk_widget_show_all (dialog); diff --git a/src/fe-gtk/notifygui.c b/src/fe-gtk/notifygui.c index 17444572..53a03646 100644 --- a/src/fe-gtk/notifygui.c +++ b/src/fe-gtk/notifygui.c @@ -391,34 +391,39 @@ fe_notify_ask (char *nick, char *networks) gtk_container_set_border_width (GTK_CONTAINER (table), 12); gtk_grid_set_row_spacing (GTK_GRID (table), 3); gtk_grid_set_column_spacing (GTK_GRID (table), 8); - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), table); + gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), + table, TRUE, TRUE, 0); label = gtk_label_new (msg); - gtkutil_grid_attach_defaults (table, label, 0, 1, 0, 1); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtkutil_grid_attach (table, label, 0, 1, 0, 1, GTKUTIL_ATTACH_FILL, 0, 0, 0); entry = gtk_entry_new (); gtk_entry_set_text (GTK_ENTRY (entry), nick); g_signal_connect (G_OBJECT (entry), "activate", G_CALLBACK (notifygui_add_enter), dialog); - gtkutil_grid_attach_defaults (table, entry, 1, 2, 0, 1); + gtkutil_grid_attach (table, entry, 1, 2, 0, 1, + GTKUTIL_ATTACH_EXPAND | GTKUTIL_ATTACH_FILL, 0, 0, 0); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (notifygui_add_cb), entry); label = gtk_label_new (_("Notify on these networks:")); - gtkutil_grid_attach_defaults (table, label, 0, 1, 2, 3); + gtk_label_set_xalign (GTK_LABEL (label), 0.0f); + gtkutil_grid_attach (table, label, 0, 1, 2, 3, GTKUTIL_ATTACH_FILL, 0, 0, 0); wid = gtk_entry_new (); g_object_set_data (G_OBJECT (entry), "net", wid); g_signal_connect (G_OBJECT (wid), "activate", G_CALLBACK (notifygui_add_enter), dialog); gtk_entry_set_text (GTK_ENTRY (wid), networks ? networks : "ALL"); - gtkutil_grid_attach_defaults (table, wid, 1, 2, 2, 3); + gtkutil_grid_attach (table, wid, 1, 2, 2, 3, + GTKUTIL_ATTACH_EXPAND | GTKUTIL_ATTACH_FILL, 0, 0, 0); label = gtk_label_new (NULL); g_snprintf (buf, sizeof (buf), "%s", _("Comma separated list of networks is accepted.")); gtk_label_set_markup (GTK_LABEL (label), buf); - gtkutil_grid_attach_defaults (table, label, 1, 2, 3, 4); + gtkutil_grid_attach (table, label, 1, 2, 3, 4, GTKUTIL_ATTACH_FILL, 0, 0, 0); gtk_widget_show_all (dialog); } diff --git a/src/fe-gtk/servlistgui.c b/src/fe-gtk/servlistgui.c index a0e508c8..54902a60 100644 --- a/src/fe-gtk/servlistgui.c +++ b/src/fe-gtk/servlistgui.c @@ -2423,6 +2423,8 @@ servlist_open_edit (GtkWidget *parent, ircnet *net) GtkWidget *comboboxentry_charset; GtkWidget *combobox_logintypes; GtkWidget *hbox1; + GtkWidget *content_scroll; + GtkWidget *content_box; GtkWidget *scrolledwindow2; GtkWidget *scrolledwindow4; GtkWidget *scrolledwindow5; @@ -2449,7 +2451,9 @@ servlist_open_edit (GtkWidget *parent, ircnet *net) gtk_container_set_border_width (GTK_CONTAINER (editwindow), 4); g_snprintf (buf, sizeof (buf), _("Edit %s - %s"), net->name, _(DISPLAY_NAME)); gtk_window_set_title (GTK_WINDOW (editwindow), buf); - gtk_window_set_default_size (GTK_WINDOW (editwindow), netedit_win_width, netedit_win_height); + gtk_window_set_default_size (GTK_WINDOW (editwindow), + netedit_win_width > 0 ? netedit_win_width : -1, + netedit_win_height > 0 ? netedit_win_height : -1); gtk_window_set_transient_for (GTK_WINDOW (editwindow), GTK_WINDOW (parent)); gtk_window_set_modal (GTK_WINDOW (editwindow), TRUE); gtk_window_set_type_hint (GTK_WINDOW (editwindow), GDK_WINDOW_TYPE_HINT_DIALOG); @@ -2458,10 +2462,20 @@ servlist_open_edit (GtkWidget *parent, ircnet *net) vbox5 = gtkutil_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 0); gtk_container_add (GTK_CONTAINER (editwindow), vbox5); + /* Keep Close accessible on small screens, while the lists still receive + all spare space when the complete form fits in the window. */ + content_scroll = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (content_scroll), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_propagate_natural_width (GTK_SCROLLED_WINDOW (content_scroll), TRUE); + gtk_scrolled_window_set_propagate_natural_height (GTK_SCROLLED_WINDOW (content_scroll), TRUE); + gtk_box_pack_start (GTK_BOX (vbox5), content_scroll, TRUE, TRUE, 0); + content_box = gtkutil_box_new (GTK_ORIENTATION_VERTICAL, FALSE, 0); + gtk_container_add (GTK_CONTAINER (content_scroll), content_box); /* Tabs and buttons */ hbox1 = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox5), hbox1, TRUE, TRUE, 4); + gtk_box_pack_start (GTK_BOX (content_box), hbox1, TRUE, TRUE, 4); scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL); scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL); @@ -2599,7 +2613,7 @@ servlist_open_edit (GtkWidget *parent, ircnet *net) /* Checkboxes and entries */ table3 = gtkutil_grid_new (19, 2, FALSE); - gtk_box_pack_start (GTK_BOX (vbox5), table3, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (content_box), table3, FALSE, FALSE, 0); gtk_grid_set_row_spacing (GTK_GRID (table3), 2); gtk_grid_set_column_spacing (GTK_GRID (table3), 8); @@ -2828,7 +2842,9 @@ servlist_open_networks (void) gtk_container_set_border_width (GTK_CONTAINER (servlist), 4); g_snprintf(buf, sizeof(buf), _("Network List - %s"), _(DISPLAY_NAME)); gtk_window_set_title (GTK_WINDOW (servlist), buf); - gtk_window_set_default_size (GTK_WINDOW (servlist), netlist_win_width, netlist_win_height); + gtk_window_set_default_size (GTK_WINDOW (servlist), + netlist_win_width > 0 ? netlist_win_width : -1, + netlist_win_height > 0 ? netlist_win_height : -1); gtk_window_set_role (GTK_WINDOW (servlist), "servlist"); gtk_window_set_type_hint (GTK_WINDOW (servlist), GDK_WINDOW_TYPE_HINT_DIALOG); if (current_sess) diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c index 89bdf09f..4fa488b9 100644 --- a/src/fe-gtk/setup.c +++ b/src/fe-gtk/setup.c @@ -1256,7 +1256,7 @@ setup_create_id_menu (GtkWidget *table, char *label, int row, char *dest) static void setup_create_menu (GtkWidget *table, int row, const setting *set) { - GtkWidget *wid, *cbox, *box; + GtkWidget *wid, *cbox; const char **text = (const char **)set->list; int i; @@ -1277,9 +1277,7 @@ setup_create_menu (GtkWidget *table, int row, const setting *set) g_signal_connect (G_OBJECT (cbox), "changed", G_CALLBACK (setup_menu_cb), (gpointer)set); - box = gtkutil_box_new (GTK_ORIENTATION_HORIZONTAL, FALSE, 0); - gtk_box_pack_start (GTK_BOX (box), cbox, 0, 0, 0); - setup_table_attach (table, box, 3, 4, row, row + 1, TRUE, FALSE, + setup_table_attach (table, cbox, 3, 6, row, row + 1, TRUE, FALSE, SETUP_ALIGN_FILL, SETUP_ALIGN_FILL, 0, 0); } @@ -1963,7 +1961,8 @@ setup_add_page (const char *title, GtkWidget *book, GtkWidget *tab) sw = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new (NULL, NULL)); gtk_scrolled_window_set_shadow_type (sw, GTK_SHADOW_IN); - gtk_scrolled_window_set_policy (sw, GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_policy (sw, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_propagate_natural_width (sw, TRUE); gtk_container_add (GTK_CONTAINER (sw), vvbox); viewport = gtk_bin_get_child (GTK_BIN(sw)); @@ -2007,7 +2006,9 @@ setup_ensure_page_created (int page) } page_widget = setup_page_factories[page] (setup_page_settings[page]); - gtk_container_add (GTK_CONTAINER (container), page_widget); + /* Lazy pages must pass the notebook's spare space to their content, + particularly the independently scrolling Sounds list. */ + gtk_box_pack_start (GTK_BOX (container), page_widget, TRUE, TRUE, 0); gtk_widget_show_all (container); } @@ -2185,9 +2186,14 @@ setup_create_tree (GtkWidget *box, GtkWidget *book) -1, _("Categories"), renderer, "text", 0, NULL); gtk_tree_view_expand_all (GTK_TREE_VIEW (tree)); - frame = gtk_frame_new (NULL); + frame = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (frame), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (frame), GTK_SHADOW_IN); + gtk_scrolled_window_set_propagate_natural_width (GTK_SCROLLED_WINDOW (frame), TRUE); + gtk_widget_set_vexpand (frame, TRUE); gtk_container_add (GTK_CONTAINER (frame), tree); - gtk_box_pack_start (GTK_BOX (box), frame, 0, 0, 0); + gtk_box_pack_start (GTK_BOX (box), frame, FALSE, TRUE, 0); gtk_box_reorder_child (GTK_BOX (box), frame, 0); if (sel_iter) diff --git a/src/fe-gtk/textgui.c b/src/fe-gtk/textgui.c index a7378580..3268a7c5 100644 --- a/src/fe-gtk/textgui.c +++ b/src/fe-gtk/textgui.c @@ -400,7 +400,6 @@ pevent_treeview_new (GtkWidget *box) scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN); - gtk_widget_set_size_request (GTK_WIDGET (scroll), -1, 250); store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); g_return_val_if_fail (store != NULL, NULL); @@ -437,7 +436,7 @@ pevent_treeview_new (GtkWidget *box) gtk_tree_view_column_set_min_width (col, 100); gtk_container_add (GTK_CONTAINER (scroll), view); - gtk_container_add (GTK_CONTAINER (box), scroll); + gtk_paned_pack1 (GTK_PANED (box), scroll, TRUE, FALSE); return view; } @@ -481,7 +480,7 @@ pevent_hlist_treeview_new (GtkWidget *box) gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_container_add (GTK_CONTAINER (scroll), view); - gtk_container_add (GTK_CONTAINER (box), scroll); + gtk_paned_pack2 (GTK_PANED (box), scroll, TRUE, FALSE); return view; } @@ -489,7 +488,7 @@ pevent_hlist_treeview_new (GtkWidget *box) void pevent_dialog_show () { - GtkWidget *vbox, *hbox, *wid, *pane; + GtkWidget *vbox, *hbox, *wid, *pane, *preview_pane; XTextColor xtext_palette[XTEXT_COLS]; if (pevent_dialog) @@ -503,8 +502,12 @@ pevent_dialog_show () TRUE, FALSE, pevent_dialog_close, NULL, 600, 455, &vbox, 0); + preview_pane = gtk_paned_new (GTK_ORIENTATION_VERTICAL); + gtk_box_pack_start (GTK_BOX (vbox), preview_pane, TRUE, TRUE, 0); pane = gtk_paned_new (GTK_ORIENTATION_VERTICAL); - gtk_box_pack_start (GTK_BOX (vbox), pane, TRUE, TRUE, 0); + gtk_paned_pack1 (GTK_PANED (preview_pane), pane, TRUE, FALSE); + gtk_paned_set_position (GTK_PANED (pane), 220); + gtk_paned_set_position (GTK_PANED (preview_pane), 330); pevent_dialog_list = pevent_treeview_new (pane); pevent_dialog_fill (pevent_dialog_list); @@ -513,12 +516,12 @@ pevent_dialog_show () wid = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (wid), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - gtk_box_pack_start (GTK_BOX (vbox), wid, FALSE, TRUE, 0); + gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (wid), 75); + gtk_paned_pack2 (GTK_PANED (preview_pane), wid, TRUE, FALSE); theme_get_xtext_colors_for_widget (wid, xtext_palette, XTEXT_COLS); pevent_dialog_twid = gtk_xtext_new (xtext_palette, 0); gtk_widget_set_sensitive (pevent_dialog_twid, FALSE); - gtk_widget_set_size_request (pevent_dialog_twid, -1, 75); gtk_container_add (GTK_CONTAINER (wid), pevent_dialog_twid); gtk_xtext_set_font (GTK_XTEXT (pevent_dialog_twid), prefs.hex_text_font); g_object_set_data (G_OBJECT (pevent_dialog), "xtext", pevent_dialog_twid); diff --git a/src/fe-gtk/theme/theme-preferences.c b/src/fe-gtk/theme/theme-preferences.c index 4058da68..7721454e 100644 --- a/src/fe-gtk/theme/theme-preferences.c +++ b/src/fe-gtk/theme/theme-preferences.c @@ -1911,6 +1911,7 @@ theme_preferences_create_page (GtkWindow *parent, G_TYPE_STRING, G_TYPE_INT); ui->gtk3_combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (gtk3_store)); + gtk_widget_set_hexpand (ui->gtk3_combo, TRUE); g_object_unref (gtk3_store); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (ui->gtk3_combo), renderer, TRUE);