pan-devel
[Top][All Lists]
Advanced

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

[Pan-devel] Patch for Window sizes, position and state


From: Marc Deslauriers
Subject: [Pan-devel] Patch for Window sizes, position and state
Date: 12 Jul 2002 22:23:37 -0400

Hi,

Here is a patch for Pan from CVS that fixes the window position and size
code.
 
I also added code to check and save Pan's maximized state, so if Pan was
maximized, it will remember it.

This is mainly to go with Gnome2's new WM, Metacity, because it was
decided that applications should remember their states, and not the WM.

What do you think?

Marc.

--- pan/pan/gui.c       2002-07-06 18:40:14.000000000 -0400
+++ newpan/pan/gui.c    2002-07-12 22:03:18.000000000 -0400
@@ -164,6 +164,7 @@
 

 static int current_layout = -1;
+static gboolean pan_maximized = 0;
 
 GtkWidget * groups_vbox;
 GtkWidget * articlelist_ctree;
@@ -1086,17 +1087,22 @@
        g_return_if_fail (widget->window!=NULL);
        g_return_if_fail (is_nonempty_string(key));
 
-       gdk_window_get_position (widget->window, &x, &y);
-       gdk_window_get_size (widget->window, &w, &h);
+       if (!pan_maximized)
+       {
+               gtk_window_get_position (GTK_WINDOW(widget), &x, &y);
+               gtk_window_get_size (GTK_WINDOW(widget), &w, &h);
 
-       g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_x", key);
-       pan_config_set_int (buf, x);
-       g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_y", key);
-       pan_config_set_int (buf, y);
-       g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_width", key);
-       pan_config_set_int (buf, w);
-       g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_height", key);
-       pan_config_set_int (buf, h);
+               g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_x", key);
+               pan_config_set_int (buf, x);
+               g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_y", key);
+               pan_config_set_int (buf, y);
+               g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_width", key);
+               pan_config_set_int (buf, w);
+               g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_height", key);
+               pan_config_set_int (buf, h);
+       }
+       g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_max", key);
+       pan_config_set_bool (buf, pan_maximized);
 
        pan_config_sync ();
 
@@ -1306,15 +1312,21 @@
        w = pan_config_get_int (buf);
        g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_height", key);
        h = pan_config_get_int (buf);
+       g_snprintf (buf, sizeof(buf), "/Pan/Geometry/%s_max", key);
+       pan_maximized = pan_config_get_bool (buf);
 
        /* move & resize */
-       if ((0<x && x<screen_w-fuzz) && (0<y && y<screen_h-fuzz))
-               gtk_widget_set_uposition (widget, x, y);
+       if ((0<=x && x<screen_w-fuzz) && (0<=y && y<screen_h-fuzz))
+               gtk_window_move (GTK_WINDOW(widget), x, y);
        if (w>0 && h>0) {
                gtk_window_set_default_size (GTK_WINDOW(widget), w, h);
                retval = TRUE;
        }
-
+       if (pan_maximized)
+               gtk_window_maximize (GTK_WINDOW(widget));
+       else
+               gtk_window_unmaximize (GTK_WINDOW(widget));
+       
        return retval;
 }
 
@@ -1445,6 +1457,21 @@
        return TRUE;
 }
 
+static int
+window_state_event_cb (GtkWidget *widget,
+                       GdkEvent *event,
+                       gpointer  data)
+{
+       if( (event->type) == (GDK_WINDOW_STATE))
+       {
+               if((((GdkEventWindowState*)event)->new_window_state) & 
GDK_WINDOW_STATE_MAXIMIZED)
+                       pan_maximized = TRUE;   
+               else
+                       pan_maximized = FALSE;  
+       }
+       return FALSE;
+}
+
 static char*
 menu_translate(const char* path, gpointer data)
 {
@@ -1808,6 +1835,8 @@
                          G_CALLBACK (window_delete_event_cb), NULL);
        g_signal_connect (GTK_OBJECT(Pan.window), "destroy",
                          G_CALLBACK (pan_shutdown), NULL);
+       g_signal_connect (GTK_OBJECT(Pan.window), "window_state_event",
+                         G_CALLBACK (window_state_event_cb), NULL);
 
        /* set the window icon */
        if (1) {






reply via email to

[Prev in Thread] Current Thread [Next in Thread]