[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Fix for main map scrollbars



  Hello,

  A few days ago I posted a message on freeciv-dev about the problem of getting
the scrollbars to correctly reposition themselves when using the GTKStep
theme engine.  I'm still working on the more general solution to the problem
(making a 'real' Freeciv map widget, perhaps derived from the Viewport class?)
but I think I have an interim solution.  It seems to generate a gratuitous
GTK+ warning, I'm not sure what to do about this :/ -- but everything looks to
me like it works fine (and the scrollbars are in the right place! :) )

  This patch removes the explicit creation of scrollbars and instead creates a
scrolled window, giving it the adjustments used to fiddle with the map canvas'
location.  We then add the map canvas directly to the scrolled window (instead
of using gtk_scrolled_window_add_with_viewport).  This works beautifully.

  I'm crossposting this to gtk-app-devel-list because (a) there might be
someone there puzzling with the same problem and (b) I'd like to know if there's
anything horribly broken with this system and I think they may be able to yell
at me authoritatively if I've screwed up. :) If not, I would like to ask whether
this could be made the standard way to dock scrollbars next to a widget,
depricating direct packing of the scrollbar widgets (the warning should probably
be removed if this is done..)  It's not that difficult and seems more general
to me.

  Daniel

-- 
Whoever fights monsters should see to it that in the process he does not
become a monster.  And when you look into an abyss, the abyss also looks
into you.
		-- Friedrich Nietzsche
diff -ru freeciv-1.8.1/client/gui-gtk/gui_main.c freeciv-1.8.1.scrollfix/client/gui-gtk/gui_main.c
--- freeciv-1.8.1/client/gui-gtk/gui_main.c	Sat Jul  3 01:26:51 1999
+++ freeciv-1.8.1.scrollfix/client/gui-gtk/gui_main.c	Sun Aug  1 21:33:36 1999
@@ -137,7 +137,7 @@
 GtkWidget *	text_scrollbar;
 GtkWidget *	inputline;
 
-GtkWidget *	map_horizontal_scrollbar, *map_vertical_scrollbar;
+GtkWidget *     map_scrolledwin;
 gint		gdk_input_id;
 
 GtkStyle *	notify_dialog_style;
@@ -634,10 +634,6 @@
   gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 );
 
   frame = gtk_frame_new( NULL );
-  gtk_table_attach(GTK_TABLE(table), frame,
-		0, 1, 0, 1,
-		GTK_EXPAND|GTK_SHRINK|GTK_FILL,
-		GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0 );
 
   map_canvas		      = gtk_drawing_area_new();
 
@@ -648,13 +644,13 @@
   gtk_drawing_area_size(GTK_DRAWING_AREA(map_canvas), 510, 300);
   gtk_container_add(GTK_CONTAINER(frame), map_canvas);
 
-  map_horizontal_scrollbar = gtk_hscrollbar_new(NULL);
-  gtk_table_attach(GTK_TABLE(table), map_horizontal_scrollbar, 0, 1, 1, 2,
-		GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
-
-  map_vertical_scrollbar = gtk_vscrollbar_new(NULL);
-  gtk_table_attach(GTK_TABLE(table), map_vertical_scrollbar, 1, 2, 0, 1,
-		0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0);
+  map_scrolledwin=gtk_scrolled_window_new(NULL,NULL);
+  gtk_table_attach(GTK_TABLE(table), map_scrolledwin, 0, 1, 1, 2,
+		   GTK_EXPAND|GTK_SHRINK|GTK_FILL,
+		   GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0);
+
+  gtk_container_add(GTK_CONTAINER(map_scrolledwin),
+		    frame);
 
   /* Event signals */
   gtk_signal_connect( GTK_OBJECT( map_canvas ), "expose_event",
diff -ru freeciv-1.8.1/client/gui-gtk/gui_main.c~ freeciv-1.8.1.scrollfix/client/gui-gtk/gui_main.c~
--- freeciv-1.8.1/client/gui-gtk/gui_main.c~	Sat Jul  3 01:26:51 1999
+++ freeciv-1.8.1.scrollfix/client/gui-gtk/gui_main.c~	Sun Aug  1 21:27:18 1999
@@ -137,7 +137,7 @@
 GtkWidget *	text_scrollbar;
 GtkWidget *	inputline;
 
-GtkWidget *	map_horizontal_scrollbar, *map_vertical_scrollbar;
+GtkWidget *     map_scrolledwin;
 gint		gdk_input_id;
 
 GtkStyle *	notify_dialog_style;
@@ -634,10 +634,6 @@
   gtk_box_pack_start( GTK_BOX( vbox2 ), table, TRUE, TRUE, 0 );
 
   frame = gtk_frame_new( NULL );
-  gtk_table_attach(GTK_TABLE(table), frame,
-		0, 1, 0, 1,
-		GTK_EXPAND|GTK_SHRINK|GTK_FILL,
-		GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0 );
 
   map_canvas		      = gtk_drawing_area_new();
 
@@ -648,13 +644,13 @@
   gtk_drawing_area_size(GTK_DRAWING_AREA(map_canvas), 510, 300);
   gtk_container_add(GTK_CONTAINER(frame), map_canvas);
 
-  map_horizontal_scrollbar = gtk_hscrollbar_new(NULL);
-  gtk_table_attach(GTK_TABLE(table), map_horizontal_scrollbar, 0, 1, 1, 2,
-		GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
-
-  map_vertical_scrollbar = gtk_vscrollbar_new(NULL);
-  gtk_table_attach(GTK_TABLE(table), map_vertical_scrollbar, 1, 2, 0, 1,
-		0, GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0);
+  map_scrolledwin=gtk_scrolled_window_new(NULL,NULL);
+  gtk_table_attach(GTK_TABLE(table), map_scrolledwin, 0, 1, 1, 2,
+		   GTK_EXPAND|GTK_SHRINK|GTK_FILL,
+		   GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0);
+
+  gtk_container_add(GTK_CONTAINER(map_scrolledwin),
+		    map_canvas);
 
   /* Event signals */
   gtk_signal_connect( GTK_OBJECT( map_canvas ), "expose_event",
diff -ru freeciv-1.8.1/client/gui-gtk/mapview.c freeciv-1.8.1.scrollfix/client/gui-gtk/mapview.c
--- freeciv-1.8.1/client/gui-gtk/mapview.c	Tue Jun 15 07:40:34 1999
+++ freeciv-1.8.1.scrollfix/client/gui-gtk/mapview.c	Sun Aug  1 21:23:18 1999
@@ -67,7 +67,7 @@
 extern GtkWidget *	map_canvas;			/* GtkDrawingArea */
 extern GtkWidget *	overview_canvas;		/* GtkDrawingArea */
 
-extern GtkWidget *	map_vertical_scrollbar, *map_horizontal_scrollbar;
+extern GtkWidget *	map_scrolledwin;
 
 /* this pixmap acts as a backing store for the map_canvas widget */
 extern GdkPixmap *	map_canvas_store;
@@ -851,10 +851,10 @@
 	   map_canvas_store_twidth, map_canvas_store_twidth);
   map_vadj=gtk_adjustment_new(-1, 0, map.ysize, 1,
 	   map_canvas_store_theight, map_canvas_store_theight);
-  gtk_range_set_adjustment(GTK_RANGE(map_horizontal_scrollbar),
-	GTK_ADJUSTMENT(map_hadj));
-  gtk_range_set_adjustment(GTK_RANGE(map_vertical_scrollbar),
-	GTK_ADJUSTMENT(map_vadj));
+  gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(map_scrolledwin),
+				      GTK_ADJUSTMENT(map_hadj));
+  gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(map_scrolledwin),
+				      GTK_ADJUSTMENT(map_vadj));
 
   gtk_signal_connect(GTK_OBJECT(map_hadj), "value_changed",
 	GTK_SIGNAL_FUNC(scrollbar_jump_callback), (gpointer)TRUE);
Only in freeciv-1.8.1.scrollfix/client/gui-gtk: mapview.c~
Only in freeciv-1.8.1.scrollfix/client/gui-xaw: Makefile
Only in freeciv-1.8.1.scrollfix/client/include: Makefile


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]