[PATCH 6/7] control center: Add support for new titlebar actions



Add menu/lower to the list, and rename the actions from "double click"
to "titlebar", since they can now affect other mouse actions than just
double clicks.

This also abstracts out the translation from string<->action so that it
can be used for the other button events (when we support configuring them).

Signed-off-by: Linus Torvalds <torvalds linux-foundation org>
---
 libwindow-settings/metacity-window-manager.c |   81 +++++++++++++++++---------
 1 files changed, 53 insertions(+), 28 deletions(-)

diff --git a/libwindow-settings/metacity-window-manager.c b/libwindow-settings/metacity-window-manager.c
index bba3979..e0ccf48 100644
--- a/libwindow-settings/metacity-window-manager.c
+++ b/libwindow-settings/metacity-window-manager.c
@@ -41,10 +41,13 @@
 #define METACITY_MOUSE_MODIFIER_KEY "/apps/metacity/general/mouse_button_modifier"
 #define METACITY_DOUBLE_CLICK_TITLEBAR_KEY "/apps/metacity/general/action_double_click_titlebar"
 
-enum
+enum titlebar_actions
 {
-        DOUBLE_CLICK_MAXIMIZE,
-        DOUBLE_CLICK_SHADE
+        TITLEBAR_MAXIMIZE,
+        TITLEBAR_SHADE,
+        TITLEBAR_LOWER,
+        TITLEBAR_MENU,
+        TITLEBAR_DEFAULT
 };
 
 static GnomeWindowManagerClass *parent_class;
@@ -151,6 +154,41 @@ metacity_get_user_theme_folder (GnomeWindowManager *wm)
         return g_build_filename (g_get_home_dir (), ".themes", NULL);
 }
 
+static char *
+metacity_titlebar_action_string(enum titlebar_actions action)
+{
+        switch (action) {
+        case TITLEBAR_DEFAULT:
+                return NULL;
+        case TITLEBAR_SHADE:
+                return "toggle_shade";
+        case TITLEBAR_MAXIMIZE:
+                return "toggle_maximize";
+        case TITLEBAR_LOWER:
+                return "lower";
+        case TITLEBAR_MENU:
+                return "menu";
+        }
+        return NULL;
+}
+
+enum titlebar_actions
+metacity_titlebar_action(const char *string)
+{
+        if (!string)
+                return TITLEBAR_DEFAULT;
+        if (!strcmp(string, "toggle_shade"))
+                return TITLEBAR_SHADE;
+        if (!strcmp(string, "toggle_maximize"))
+                return TITLEBAR_MAXIMIZE;
+        if (!strcmp(string, "lower"))
+                return TITLEBAR_LOWER;
+        if (!strcmp(string, "menu"))
+                return TITLEBAR_MENU;
+
+        return TITLEBAR_DEFAULT;
+}
+
 static void
 metacity_change_settings (GnomeWindowManager    *wm,
                           const GnomeWMSettings *settings)
@@ -200,17 +238,7 @@ metacity_change_settings (GnomeWindowManager    *wm,
         if (settings->flags & GNOME_WM_SETTING_DOUBLE_CLICK_ACTION) {
                 const char *action;
 
-                action = NULL;
-                
-                switch (settings->double_click_action) {
-                case DOUBLE_CLICK_SHADE:
-                        action = "toggle_shade";
-                        break;
-                case DOUBLE_CLICK_MAXIMIZE:
-                        action = "toggle_maximize";
-                        break;
-                }
-
+                action = metacity_titlebar_action_string(settings->double_click_action);
                 if (action != NULL) {
                         gconf_client_set_string (meta_wm->p->gconf,
                                                  METACITY_DOUBLE_CLICK_TITLEBAR_KEY,
@@ -342,23 +370,18 @@ metacity_get_settings (GnomeWindowManager *wm,
 
         if (to_get & GNOME_WM_SETTING_DOUBLE_CLICK_ACTION) {
                 char *str;
+                enum titlebar_actions action;
 
                 str = gconf_client_get_string (meta_wm->p->gconf,
                                                METACITY_DOUBLE_CLICK_TITLEBAR_KEY,
                                                NULL);
-                
-                if (str == NULL)
-                        str = g_strdup ("toggle_shade");
-                
-                if (strcmp (str, "toggle_shade") == 0)
-                        settings->double_click_action = DOUBLE_CLICK_SHADE;
-                else if (strcmp (str, "toggle_maximize") == 0)
-                        settings->double_click_action = DOUBLE_CLICK_MAXIMIZE;
-                else
-                        settings->double_click_action = DOUBLE_CLICK_SHADE;
-                
+                action = metacity_titlebar_action(str);
                 g_free (str);
-                
+
+                if (action == TITLEBAR_DEFAULT)
+                        action = TITLEBAR_SHADE;
+
+                settings->double_click_action = action;
                 settings->flags |= GNOME_WM_SETTING_DOUBLE_CLICK_ACTION;             
         }
 }
@@ -375,8 +398,10 @@ metacity_get_double_click_actions (GnomeWindowManager              *wm,
                                    int                             *n_actions_p)
 {
         static GnomeWMDoubleClickAction actions[] = {
-                { DOUBLE_CLICK_MAXIMIZE, N_("Maximize") },
-                { DOUBLE_CLICK_SHADE, N_("Roll up") }
+                { TITLEBAR_MAXIMIZE, N_("Maximize") },
+                { TITLEBAR_SHADE, N_("Roll up") },
+                { TITLEBAR_LOWER, N_("Lower") },
+                { TITLEBAR_MENU, N_("Menu") },
         };
         static gboolean initialized = FALSE;        
 
-- 
1.5.0




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