From 33c1874fbb17ed83c6d24103eff09c83297e0c4d Mon Sep 17 00:00:00 2001 From: Stefano Karapetsas Date: Tue, 18 Feb 2014 16:23:48 +0100 Subject: Allow to have multiple panel layouts --- data/Makefile.am | 6 ++-- data/default.layout | 53 +++++++++++++++++++++++++++++++++++ data/org.mate.panel.gschema.xml.in.in | 5 ++++ data/panel-default-layout.mate | 53 ----------------------------------- mate-panel/panel-layout.c | 27 +++++++++++------- mate-panel/panel-schemas.h | 1 + 6 files changed, 79 insertions(+), 66 deletions(-) create mode 100644 data/default.layout delete mode 100644 data/panel-default-layout.mate diff --git a/data/Makefile.am b/data/Makefile.am index 7b7d3721..cca1600c 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -1,5 +1,5 @@ -default_layoutdir = $(datadir)/mate-panel -default_layout_DATA = panel-default-layout.mate +layoutdir = $(datadir)/mate-panel/layouts +layout_DATA = default.layout @INTLTOOL_XML_NOMERGE_RULE@ @@ -26,7 +26,7 @@ convert_DATA = mate-panel.convert EXTRA_DIST = \ $(convert_DATA) \ $(panel_gschemas_in_in) \ - panel-default-layout.mate + $(layout_DATA) CLEANFILES = \ $(panel_gschemas_in) \ diff --git a/data/default.layout b/data/default.layout new file mode 100644 index 00000000..77923b42 --- /dev/null +++ b/data/default.layout @@ -0,0 +1,53 @@ +[Toplevel top] +expand=true +orientation=top +size=24 + +[Toplevel bottom] +expand=true +orientation=bottom +size=24 + +[Object menu-bar] +object-type=menu-bar +toplevel-id=top +position=0 +locked=true + +[Object notification-area] +object-type=applet +applet-iid=NotificationAreaAppletFactory::NotificationArea +toplevel-id=top +position=10 +panel-right-stick=true +locked=true + +[Object clock] +object-type=applet +applet-iid=ClockAppletFactory::ClockApplet +toplevel-id=top +position=0 +panel-right-stick=true +locked=true + +[Object show-desktop] +object-type=applet +applet-iid=WnckletFactory::ShowDesktopApplet +toplevel-id=bottom +position=0 +locked=true + +[Object window-list] +object-type=applet +applet-iid=WnckletFactory::WindowListApplet +toplevel-id=bottom +position=20 +locked=true + +[Object workspace-switcher] +object-type=applet +applet-iid=WnckletFactory::WorkspaceSwitcherApplet +toplevel-id=bottom +position=0 +panel-right-stick=true +locked=true diff --git a/data/org.mate.panel.gschema.xml.in.in b/data/org.mate.panel.gschema.xml.in.in index 53c32b86..ec613941 100644 --- a/data/org.mate.panel.gschema.xml.in.in +++ b/data/org.mate.panel.gschema.xml.in.in @@ -1,5 +1,10 @@ + + 'default' + <_summary>Default panel layout + <_description>The default panels layout to use when panels are created or resetted. + true <_summary>Enable program list in "Run Application" dialog diff --git a/data/panel-default-layout.mate b/data/panel-default-layout.mate deleted file mode 100644 index 77923b42..00000000 --- a/data/panel-default-layout.mate +++ /dev/null @@ -1,53 +0,0 @@ -[Toplevel top] -expand=true -orientation=top -size=24 - -[Toplevel bottom] -expand=true -orientation=bottom -size=24 - -[Object menu-bar] -object-type=menu-bar -toplevel-id=top -position=0 -locked=true - -[Object notification-area] -object-type=applet -applet-iid=NotificationAreaAppletFactory::NotificationArea -toplevel-id=top -position=10 -panel-right-stick=true -locked=true - -[Object clock] -object-type=applet -applet-iid=ClockAppletFactory::ClockApplet -toplevel-id=top -position=0 -panel-right-stick=true -locked=true - -[Object show-desktop] -object-type=applet -applet-iid=WnckletFactory::ShowDesktopApplet -toplevel-id=bottom -position=0 -locked=true - -[Object window-list] -object-type=applet -applet-iid=WnckletFactory::WindowListApplet -toplevel-id=bottom -position=20 -locked=true - -[Object workspace-switcher] -object-type=applet -applet-iid=WnckletFactory::WorkspaceSwitcherApplet -toplevel-id=bottom -position=0 -panel-right-stick=true -locked=true diff --git a/mate-panel/panel-layout.c b/mate-panel/panel-layout.c index 47324208..f7554990 100644 --- a/mate-panel/panel-layout.c +++ b/mate-panel/panel-layout.c @@ -37,8 +37,7 @@ #include "panel-schemas.h" #include "panel-enums.h" -#define PANEL_LAYOUT_MATE_FILE PANELDATADIR "/panel-default-layout.mate" -#define PANEL_LAYOUT_DIST_FILE PANELDATADIR "/panel-default-layout.dist" +#define PANEL_LAYOUTS_DIR PANELDATADIR "/layouts/" typedef struct { const char *name; @@ -91,15 +90,23 @@ static PanelLayoutKeyDefinition panel_layout_object_keys[] = { * distributions */ static gchar * -panel_layout_filename () { - - if (g_file_test (PANEL_LAYOUT_DIST_FILE, G_FILE_TEST_IS_REGULAR)) { - return g_strdup (PANEL_LAYOUT_DIST_FILE); - } - else if (g_file_test (PANEL_LAYOUT_MATE_FILE, G_FILE_TEST_IS_REGULAR)) { - return g_strdup (PANEL_LAYOUT_MATE_FILE); +panel_layout_filename () +{ + GSettings *settings; + gchar *layout; + gchar *filename; + + settings = g_settings_new (PANEL_SCHEMA); + layout = g_settings_get_string (settings, PANEL_DEFAULT_LAYOUT); + filename = g_strdup_printf (PANEL_LAYOUTS_DIR "%s.layout", layout); + g_free (layout); + g_object_unref (settings); + + if (g_file_test (filename, G_FILE_TEST_IS_REGULAR)) { + return filename; } else { + g_free (filename); return NULL; } } @@ -341,7 +348,7 @@ panel_layout_apply_default_from_gkeyfile (GdkScreen *screen) } else { - g_warning ("Cant find a default layout file!"); + g_warning ("Cant find the layout file!"); /* FIXME implement a fallback panel */ } diff --git a/mate-panel/panel-schemas.h b/mate-panel/panel-schemas.h index c21a8464..ee7c894b 100644 --- a/mate-panel/panel-schemas.h +++ b/mate-panel/panel-schemas.h @@ -10,6 +10,7 @@ #define PANEL_OBJECT_DEFAULT_PREFIX "object" #define PANEL_SCHEMA "org.mate.panel" +#define PANEL_DEFAULT_LAYOUT "default-layout" #define PANEL_TOPLEVEL_ID_LIST_KEY "toplevel-id-list" #define PANEL_OBJECT_ID_LIST_KEY "object-id-list" #define PANEL_LOCKED_DOWN_KEY "locked-down" -- cgit v1.2.1