aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ephy-state.c
diff options
context:
space:
mode:
authorDavid Bordoley <bordoley@msu.edu>2003-04-28 11:29:20 +0800
committerDave Bordoley <Bordoley@src.gnome.org>2003-04-28 11:29:20 +0800
commit39be2b7d5389829cdc5ecb7084b1cab12b4b86ea (patch)
tree739e26771080327b89388c4164cd2aeb95728cd1 /lib/ephy-state.c
parent948ed56e6996018cd6504e0b990f24b48f4398ce (diff)
downloadgsoc2013-epiphany-39be2b7d5389829cdc5ecb7084b1cab12b4b86ea.tar
gsoc2013-epiphany-39be2b7d5389829cdc5ecb7084b1cab12b4b86ea.tar.gz
gsoc2013-epiphany-39be2b7d5389829cdc5ecb7084b1cab12b4b86ea.tar.bz2
gsoc2013-epiphany-39be2b7d5389829cdc5ecb7084b1cab12b4b86ea.tar.lz
gsoc2013-epiphany-39be2b7d5389829cdc5ecb7084b1cab12b4b86ea.tar.xz
gsoc2013-epiphany-39be2b7d5389829cdc5ecb7084b1cab12b4b86ea.tar.zst
gsoc2013-epiphany-39be2b7d5389829cdc5ecb7084b1cab12b4b86ea.zip
Save the position of windows on the screen, and checks if the position is
2003-04-27 David Bordoley <bordoley@msu.edu> * lib/ephy-state.c: (ephy_state_window_set_position), (ephy_state_window_save_position), (window_configure_event_cb), (window_state_event_cb), (ephy_state_add_window): Save the position of windows on the screen, and checks if the position is off the screen. * src/toolbar.c: (init_bookmarks_toolbar): Pass arguments to egg_toolbars_model_set_flags in the correct order.
Diffstat (limited to 'lib/ephy-state.c')
-rw-r--r--lib/ephy-state.c77
1 files changed, 76 insertions, 1 deletions
diff --git a/lib/ephy-state.c b/lib/ephy-state.c
index e89c2db88..44d85909a 100644
--- a/lib/ephy-state.c
+++ b/lib/ephy-state.c
@@ -29,13 +29,16 @@
#include <gtk/gtkpaned.h>
#define STATES_FILE "states.xml"
+#define WINDOW_POSITION_UNSET -1
enum
{
EPHY_NODE_STATE_PROP_NAME = 2,
EPHY_NODE_STATE_PROP_WIDTH = 3,
EPHY_NODE_STATE_PROP_HEIGHT = 4,
- EPHY_NODE_STATE_PROP_MAXIMIZE = 5
+ EPHY_NODE_STATE_PROP_MAXIMIZE = 5,
+ EPHY_NODE_STATE_PROP_POSITION_X = 6,
+ EPHY_NODE_STATE_PROP_POSITION_Y = 7
};
static EphyNode *states;
@@ -167,6 +170,38 @@ ephy_state_window_set_size (GtkWidget *window, EphyNode *node)
}
static void
+ephy_state_window_set_position (GtkWidget *window, EphyNode *node)
+{
+ GdkScreen *screen;
+ int x, y;
+ int screen_width, screen_height;
+
+ g_return_if_fail (GTK_IS_WINDOW (window));
+
+ /* Setting the default size doesn't work when the window is already showing. */
+ g_return_if_fail (!GTK_WIDGET_VISIBLE (window));
+
+ x = ephy_node_get_property_int (node, EPHY_NODE_STATE_PROP_POSITION_X);
+ y = ephy_node_get_property_int (node, EPHY_NODE_STATE_PROP_POSITION_Y);
+
+ screen = gtk_window_get_screen (GTK_WINDOW (window));
+ screen_width = gdk_screen_get_width (screen);
+ screen_height = gdk_screen_get_height (screen);
+
+ if ((x >= screen_width) || (y >= screen_height))
+ {
+ x = y = WINDOW_POSITION_UNSET;
+ }
+
+ /* If the window has a saved position set it, otherwise let the WM do it */
+ if ((x != WINDOW_POSITION_UNSET) && (y != WINDOW_POSITION_UNSET))
+ {
+ gtk_window_move (GTK_WINDOW (window), x, y);
+ }
+}
+
+
+static void
ephy_state_window_save_size (GtkWidget *window, EphyNode *node)
{
int width, height;
@@ -202,12 +237,34 @@ ephy_state_window_save_size (GtkWidget *window, EphyNode *node)
g_value_unset (&value);
}
+static void
+ephy_state_window_save_position (GtkWidget *window, EphyNode *node)
+{
+ int x,y;
+ GValue value = { 0, };
+
+ gtk_window_get_position (GTK_WINDOW (window), &x, &y);
+
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, x);
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_POSITION_X,
+ &value);
+ g_value_unset (&value);
+
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, y);
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_POSITION_Y,
+ &value);
+ g_value_unset (&value);
+}
+
static gboolean
window_configure_event_cb (GtkWidget *widget,
GdkEventConfigure *event,
EphyNode *node)
{
ephy_state_window_save_size (widget, node);
+ ephy_state_window_save_position (widget, node);
return FALSE;
}
@@ -217,6 +274,7 @@ window_state_event_cb (GtkWidget *widget,
EphyNode *node)
{
ephy_state_window_save_size (widget, node);
+ ephy_state_window_save_position (widget, node);
return FALSE;
}
@@ -261,9 +319,26 @@ ephy_state_add_window (GtkWidget *window,
ephy_node_set_property (node, EPHY_NODE_STATE_PROP_MAXIMIZE,
&value);
g_value_unset (&value);
+
+ /* Metacity and presumably any other sane wm won't let
+ * you drag the titlebar of a window off the screen, so
+ * we set the inital cordinate to an impossible value (-1,-1)
+ */
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, WINDOW_POSITION_UNSET);
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_POSITION_X,
+ &value);
+ g_value_unset (&value);
+
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, WINDOW_POSITION_UNSET);
+ ephy_node_set_property (node, EPHY_NODE_STATE_PROP_POSITION_Y,
+ &value);
+ g_value_unset (&value);
}
ephy_state_window_set_size (window, node);
+ ephy_state_window_set_position (window, node);
g_signal_connect_object (window, "configure_event",
G_CALLBACK (window_configure_event_cb), node, 0);