<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40315 >

Jason Dorje Short wrote:
> <URL: http://bugs.freeciv.org/Ticket/Display.html?id=40315 >
> 
> Every time the text on the left panel (generally the terrain text) 
> changes the panel resizes itself.  This leads to a redraw of the main 
> screen.  The end effect is to basically make the game unplayable.
> 
> The left panel should never automatically shrink itself.  It can 
> automatically enlarge itself if necessary.  There should be a GTK option 
> for this.

This obnoxious hack fixes the problem.  I have the very strong feeling 
there is some simple gtk setting to control this but i have no idea what 
it is.  Regardless, with this patch the game is far far more playable.

-jason

Index: client/gui-gtk-2.0/gui_main.c
===================================================================
--- client/gui-gtk-2.0/gui_main.c	(revision 14862)
+++ client/gui-gtk-2.0/gui_main.c	(working copy)
@@ -1206,6 +1206,7 @@
 
   unit_info_frame = gtk_frame_new("");
   gtk_box_pack_start(GTK_BOX(unit_info_box), unit_info_frame, FALSE, FALSE, 0);
+  gtk_widget_set_no_shrink(unit_info_frame);
     
   unit_info_label = gtk_label_new("\n\n\n");
   gtk_container_add(GTK_CONTAINER(unit_info_frame), unit_info_label);
Index: client/gui-gtk-2.0/gui_stuff.c
===================================================================
--- client/gui-gtk-2.0/gui_stuff.c	(revision 14862)
+++ client/gui-gtk-2.0/gui_stuff.c	(working copy)
@@ -996,3 +996,31 @@
   }
 }
 
+/**************************************************************************
+  Handle a size request and make sure the widget GROWS only, no shrinking.
+**************************************************************************/
+static void size_request_no_shrink(GtkWidget *widget,
+				   GtkRequisition *req,
+				   gpointer user_data)
+{
+  int width, height;
+
+  gtk_widget_get_size_request(widget, &width, &height);
+  gtk_widget_set_size_request(widget,
+			      MAX(width, req->width), MAX(height, req->height));
+}
+
+/**************************************************************************
+  This function is a major hack and probably easily accomplished via some
+  simple GTK setting.  The goal is to make sure a particular widget will
+  only grow; never shrink.  For instance the unit info panel sometimes gets
+  test too big for it.  This text makes the panel grow.  When moving to the
+  next unit, the panel would typlically then shrink again causing the entire
+  mapview to resize itself obnoxiously.  With this setting the unit info
+  panel will never shrink.
+**************************************************************************/
+void gtk_widget_set_no_shrink(GtkWidget *widget)
+{
+  g_signal_connect(widget, "size-request",
+		   G_CALLBACK(size_request_no_shrink), NULL);
+}
Index: client/gui-gtk-2.0/gui_stuff.h
===================================================================
--- client/gui-gtk-2.0/gui_stuff.h	(revision 14862)
+++ client/gui-gtk-2.0/gui_stuff.h	(working copy)
@@ -123,4 +123,6 @@
 struct client_option;
 void gui_update_font_from_option(struct client_option *o);
 
+void gtk_widget_set_no_shrink(GtkWidget *widget);
+
 #endif  /* FC__GUI_STUFF_H */
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to