[Debian-med-packaging] Bug#901677: amide: Window is too wide and not resizable

Yavor Doganov yavor at gnu.org
Sat Feb 24 09:55:03 GMT 2024


Control: tags -1 + patch

Attached is a patch which makes the main (study) windows resizable at
the expense of losing automatic expanding and shrinking.  Currently,
if you switch off two of the Transverse/Coronal/Sagittal views the
window will shrink automatically.  Likewise, if you enable 2-way/3-way
views it will expand to the necessary height and by disabling them it
will shrink.  This is a nice feature and judging by the comment in
ui_study.c, it is the sole reason why upstream decided to make the
window non-resizable.

However, the OP's complaint is perfectly legitimate, it is very
difficult and unpleasant to work with a window that large.
-------------- next part --------------
Description: Make the main (study) window resizable.
 Toolbar menu items "Thickness", "Field of view" and "Zoom" do nothing
 but they are necessary -- if the window is resized so that the right
 border is at one of these widgets, no drop-down arrow will be shown
 so the user will not have access to the Gate/Time buttons.  Other
 items from "Threshold" leftwards are proper GtkToolItems (rather than
 widgets packed in a GtkToolItem) so their menus are fully functional
 and will appear as normal/toggle/radio menu items.
Bug-Debian: https://bugs.debian.org/901677
Bug: https://github.com/ferdymercury/amide/issues/26
Author: Yavor Doganov <yavor at gnu.org>
Forwarded: no
Last-Update: 2024-02-24
---

--- amide.orig/amide-current/src/ui_study.c
+++ amide/amide-current/src/ui_study.c
@@ -540,7 +540,7 @@
   toolbar = gtk_toolbar_new();
   gtk_box_pack_start (GTK_BOX (ui_study->window_vbox), toolbar, FALSE, FALSE, 0);
   gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_ICONS);
-  gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolbar), FALSE);
+  gtk_widget_set_hexpand(toolbar, FALSE);
 
   tool_item = gtk_radio_tool_button_new(NULL);
   gtk_tool_button_set_label(GTK_TOOL_BUTTON(tool_item), _("Near."));
@@ -568,9 +568,8 @@
   for (i_rendering = 0; i_rendering < AMITK_RENDERING_NUM; i_rendering++) 
     gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ui_study->rendering_menu), amitk_rendering_get_name(i_rendering));
   g_signal_connect(G_OBJECT(ui_study->rendering_menu), "changed", G_CALLBACK(ui_study_cb_rendering), ui_study);
-  ui_common_toolbar_insert_widget(toolbar, ui_study->rendering_menu,
-                                  _(amitk_rendering_explanation),
-                                  gtk_toolbar_get_n_items(GTK_TOOLBAR(toolbar)));
+  ui_common_toolbar_append_widget(toolbar, ui_study->rendering_menu,
+                                  _(amitk_rendering_explanation));
 
   ui_common_toolbar_append_separator(toolbar);
 
@@ -672,7 +671,7 @@
 
   icon = gtk_image_new_from_icon_name("amide_icon_thresholding",
                                       GTK_ICON_SIZE_LARGE_TOOLBAR);
-  tool_item = gtk_tool_button_new(icon, _("_Threshold"));
+  tool_item = gtk_tool_button_new(icon, _("Threshold"));
   gtk_tool_item_set_tooltip_text(tool_item,
                                  _("Set the thresholds and colormaps for the active data set"));
   gtk_actionable_set_action_name(GTK_ACTIONABLE(tool_item), "win.thresholding");
@@ -697,7 +696,10 @@
   g_signal_connect(G_OBJECT(ui_study->zoom_spin), "output", G_CALLBACK(amitk_spin_button_scientific_output), NULL);
   g_signal_connect(G_OBJECT(ui_study->zoom_spin), "button_press_event",
 		   G_CALLBACK(amitk_spin_button_discard_double_or_triple_click), NULL);
-  ui_common_toolbar_append_widget(toolbar,ui_study->zoom_spin,_("specify how much to magnify the images"));
+  ui_common_toolbar_append_widget_full(toolbar, ui_study->zoom_spin,
+                                       _("Zoom"),
+                                       _("specify how much to magnify the images"),
+                                       NULL, NULL);
 
   /* a separator for clarity */
   ui_common_toolbar_append_separator(toolbar);
@@ -716,7 +718,10 @@
   g_signal_connect(G_OBJECT(ui_study->fov_spin), "value_changed", G_CALLBACK(ui_study_cb_fov), ui_study);
   g_signal_connect(G_OBJECT(ui_study->fov_spin), "button_press_event",
 		   G_CALLBACK(amitk_spin_button_discard_double_or_triple_click), NULL);
-  ui_common_toolbar_append_widget(toolbar,ui_study->fov_spin,_("specify how much of the image field of view to display"));
+  ui_common_toolbar_append_widget_full(toolbar, ui_study->fov_spin,
+                                       _("Field of view"),
+                                       _("specify how much of the image field of view to display"),
+                                       NULL, NULL);
 
   /* a separator for clarity */
   ui_common_toolbar_append_separator(toolbar);
@@ -736,7 +741,10 @@
   g_signal_connect(G_OBJECT(ui_study->thickness_spin), "output", G_CALLBACK(amitk_spin_button_scientific_output), NULL);
   g_signal_connect(G_OBJECT(ui_study->thickness_spin), "button_press_event",
 		   G_CALLBACK(amitk_spin_button_discard_double_or_triple_click), NULL);
-  ui_common_toolbar_append_widget(toolbar,ui_study->thickness_spin,_("specify how thick to make the slices (mm)"));
+  ui_common_toolbar_append_widget_full(toolbar, ui_study->thickness_spin,
+                                       _("Thickness"),
+                                       _("specify how thick to make the slices (mm)"),
+                                       NULL, NULL);
 
   /* a separator for clarity */
   ui_common_toolbar_append_separator(toolbar);
@@ -749,9 +757,10 @@
 
   ui_study->gate_button = gtk_button_new_with_label("?");
   g_signal_connect(G_OBJECT(ui_study->gate_button), "clicked", G_CALLBACK(ui_study_cb_gate), ui_study);
-  ui_common_toolbar_append_widget(toolbar, ui_study->gate_button,
-				  _("the gate range over which to view the data"));
-
+  ui_common_toolbar_append_widget_full(toolbar, ui_study->gate_button,
+                                       _("Gate"),
+                                       _("the gate range over which to view the data"),
+                                       G_CALLBACK(ui_study_cb_gate), ui_study);
 
   /* a separator for clarity */
   ui_common_toolbar_append_separator(toolbar);
@@ -762,8 +771,10 @@
 
   ui_study->time_button = gtk_button_new_with_label("?"); 
   g_signal_connect(G_OBJECT(ui_study->time_button), "clicked", G_CALLBACK(ui_study_cb_time), ui_study);
-  ui_common_toolbar_append_widget(toolbar, ui_study->time_button,
-				  _("the time range over which to view the data (s)"));
+  ui_common_toolbar_append_widget_full(toolbar, ui_study->time_button,
+                                       _("Time"),
+                                       _("the time range over which to view the data (s)"),
+                                       G_CALLBACK(ui_study_cb_time), ui_study);
 
   return;
 }
@@ -1540,13 +1551,22 @@
 void ui_study_setup_widgets(ui_study_t * ui_study) {
 
   GtkWidget * scrolled;
+  GtkWidget * scrld;
   GtkWidget * left_vbox;
   GtkWidget * hbox;
 
 
   /* the hbox that'll contain everything in the ui besides the menu and toolbar */
   hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
-  gtk_box_pack_start (GTK_BOX (ui_study->window_vbox), hbox, TRUE, TRUE, 0);
+  scrld = gtk_scrolled_window_new(NULL, NULL);
+  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrld),
+                                 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_set_propagate_natural_width(GTK_SCROLLED_WINDOW(scrld),
+                                                  TRUE);
+  gtk_scrolled_window_set_propagate_natural_height(GTK_SCROLLED_WINDOW(scrld),
+                                                   TRUE);
+  gtk_container_add(GTK_CONTAINER(scrld), hbox);
+  gtk_box_pack_start (GTK_BOX (ui_study->window_vbox), scrld, TRUE, TRUE, 0);
 
   /* make and add the left packing table */
   left_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
@@ -1638,9 +1658,6 @@
   gtk_window_set_default_icon(pixbuf); /* sets it as the default for all additional windows */
   g_object_unref(pixbuf);
 
-  /* disable user resizability, allows the window to autoshrink */  
-  gtk_window_set_resizable(ui_study->window, FALSE); 
-
   /* setup the callbacks for the window */
   g_signal_connect(G_OBJECT(ui_study->window), "delete_event",  
 		   G_CALLBACK(ui_study_cb_delete_event), ui_study);
--- amide.orig/amide-current/src/ui_common.c
+++ amide/amide-current/src/ui_common.c
@@ -821,6 +821,25 @@
   return;
 }
 
+void ui_common_toolbar_append_widget_full(GtkWidget * toolbar, GtkWidget * widget, const gchar * label, const gchar * tooltip, GCallback cb, gpointer data) {
+
+  GtkToolItem * toolbar_item;
+  GtkWidget * menu_item;
+
+  toolbar_item = gtk_tool_item_new();
+  gtk_container_add(GTK_CONTAINER(toolbar_item), widget);
+  if (tooltip != NULL)
+    gtk_widget_set_tooltip_text(widget, tooltip);
+  if (label != NULL) {
+    menu_item = gtk_menu_item_new_with_label(label);
+    gtk_tool_item_set_proxy_menu_item(toolbar_item, label, menu_item);
+    if (cb != NULL)
+      g_signal_connect(menu_item, "activate", cb, data);
+  }
+  gtk_tool_item_set_homogeneous(toolbar_item, FALSE);
+  gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolbar_item, -1);
+}
+
 void ui_common_toolbar_append_separator(GtkWidget * toolbar) {
   GtkToolItem * toolbar_item;
   toolbar_item =  gtk_separator_tool_item_new();
--- amide.orig/amide-current/src/ui_common.h
+++ amide/amide-current/src/ui_common.h
@@ -86,6 +86,7 @@
 GList * ui_common_init_dialog_selected_objects(GtkWidget * dialog);
 void ui_common_toolbar_insert_widget(GtkWidget * toolbar, GtkWidget * widget, const gchar * tooltip, gint position);
 void ui_common_toolbar_append_widget(GtkWidget * toolbar, GtkWidget * widget, const gchar * tooltip);
+void ui_common_toolbar_append_widget_full(GtkWidget * toolbar, GtkWidget * widget, const gchar * label, const gchar * tooltip, GCallback cb, gpointer data);
 void ui_common_toolbar_append_separator(GtkWidget * toolbar);
 
 void amide_call_help(const gchar * link_id);
--- amide.orig/amide-current/configure.ac
+++ amide/amide-current/configure.ac
@@ -369,7 +369,7 @@
 	glib-2.0	>= 2.68.0
 	gio-2.0         >= 2.68.0
 	gobject-2.0	>= 2.68.0
-	gtk+-3.0	>= 3.21.5
+	gtk+-3.0	>= 3.21.6
 	libxml-2.0	>= 2.4.12
 	goocanvas-2.0   >= 2.0.2
 ])


More information about the Debian-med-packaging mailing list