summaryrefslogtreecommitdiff
path: root/panel
diff options
context:
space:
mode:
authorNick Schermer <nick@xfce.org>2011-12-29 12:31:29 +0100
committerNick Schermer <nick@xfce.org>2011-12-29 12:31:29 +0100
commitcbd8b3e68f47f3bac12195774383d26281a1ba34 (patch)
treec45cb40d10362fa9384f5ed3b1daecc6c203c25b /panel
parenta8ff8f775c3c07ba35ee4bfbeca5e5ffc4920791 (diff)
Panel: Make sure the panel has a position on startup (bug #8287).
If it happens the panel looses some settings and the position string is also lost, it won't be visible on the next restart. Make sure the position is set, if it is not restored, set something new. Although this is not the position the user defined, it is better then no panel at all.
Diffstat (limited to 'panel')
-rw-r--r--panel/panel-application.c20
-rw-r--r--panel/panel-window.c16
-rw-r--r--panel/panel-window.h2
3 files changed, 28 insertions, 10 deletions
diff --git a/panel/panel-application.c b/panel/panel-application.c
index 0d3b4938..3b304a03 100644
--- a/panel/panel-application.c
+++ b/panel/panel-application.c
@@ -1421,6 +1421,7 @@ panel_application_new_window (PanelApplication *application,
gint idx;
static const gchar *props[] = { "mode", "size", "nrows" };
guint i;
+ gchar *position;
panel_return_val_if_fail (PANEL_IS_APPLICATION (application), NULL);
panel_return_val_if_fail (screen == NULL || GDK_IS_SCREEN (screen), NULL);
@@ -1444,9 +1445,6 @@ panel_application_new_window (PanelApplication *application,
property = g_strdup_printf ("/panels/panel-%d", idx);
xfconf_channel_reset_property (application->xfconf, property, TRUE);
g_free (property);
-
- /* set default position */
- g_object_set (G_OBJECT (window), "position", "p=0;x=100;y=100", NULL);
}
/* add the itembar */
@@ -1474,10 +1472,18 @@ panel_application_new_window (PanelApplication *application,
/* add the xfconf bindings */
panel_application_xfconf_window_bindings (application, PANEL_WINDOW (window), FALSE);
- /* make sure the position of the panel is always saved else
- * the new window won't be visible on restart */
- if (new_window)
- g_object_notify (G_OBJECT (window), "position");
+ /* make sure the panel has a valid position, else it is not visible */
+ if (!panel_window_has_position (PANEL_WINDOW (window)))
+ {
+ if (!new_window)
+ g_message ("No panel position set, restoring default");
+
+ /* create a position so not all panels overlap */
+ idx = g_slist_index (application->windows, window);
+ position = g_strdup_printf ("p=0;x=100;y=%d", 100 + (idx * 48 * 2));
+ g_object_set (G_OBJECT (window), "position", position, NULL);
+ g_free (position);
+ }
return PANEL_WINDOW (window);
}
diff --git a/panel/panel-window.c b/panel/panel-window.c
index ba16a7f4..f2e3ac06 100644
--- a/panel/panel-window.c
+++ b/panel/panel-window.c
@@ -142,6 +142,7 @@ static void panel_window_plugin_set_screen_position (GtkWidget *w
gpointer user_data);
+
enum
{
PROP_0,
@@ -670,8 +671,8 @@ panel_window_set_property (GObject *object,
&& sscanf (val_string, "p=%d;x=%d;y=%d", &snap_position, &x, &y) == 3)
{
window->snap_position = CLAMP (snap_position, SNAP_POSITION_NONE, SNAP_POSITION_S);
- window->base_x = x;
- window->base_y = y;
+ window->base_x = MAX (x, 0);
+ window->base_y = MAX (y, 0);
panel_window_screen_layout_changed (window->screen, window);
@@ -680,7 +681,7 @@ panel_window_set_property (GObject *object,
}
else
{
- g_message ("no valid position defined: %s", val_string);
+ g_message ("Not a valid position defined: %s", val_string);
}
break;
@@ -2549,6 +2550,15 @@ panel_window_new (GdkScreen *screen)
+gboolean
+panel_window_has_position (PanelWindow *window)
+{
+ panel_return_val_if_fail (PANEL_IS_WINDOW (window), FALSE);
+ return window->base_x != -1 && window->base_y != -1;
+}
+
+
+
void
panel_window_set_povider_info (PanelWindow *window,
GtkWidget *provider,
diff --git a/panel/panel-window.h b/panel/panel-window.h
index 99bc252b..b745c48d 100644
--- a/panel/panel-window.h
+++ b/panel/panel-window.h
@@ -37,6 +37,8 @@ GType panel_window_get_type (void) G_GNUC_CONST;
GtkWidget *panel_window_new (GdkScreen *screen) G_GNUC_MALLOC;
+gboolean panel_window_has_position (PanelWindow *window);
+
void panel_window_set_povider_info (PanelWindow *window,
GtkWidget *provider,
gboolean moving_to_other_panel);