Implement exemple of trigger function use.
authorBenoit Gschwind (Noth <doth.gschwind@gmail.com>
Sat, 16 Feb 2008 13:03:26 +0000 (14:03 +0100)
committerDana Jansens <danakj@orodu.net>
Thu, 21 Feb 2008 17:05:34 +0000 (12:05 -0500)
engines/default/plugin.c
openbox/client.c
openbox/engine_interface.h

index 9040fb3466b6c0b57efeb0fd2d48bd3507d3dc53..1f5f689af63c6f56928461c8e539f5bfeed0a541 100644 (file)
@@ -729,7 +729,7 @@ void frame_begin_iconify_animation(gpointer _self, gboolean iconifying)
     if (new_anim) {
         obt_main_loop_timeout_remove_data(plugin.ob_main_loop,
                 frame_animate_iconify, self, FALSE);
-        obt_main_loop_timeout_add(plugin.ob_main_loop,
+        obt_main_loop_timeout_add(plugin.ob_main_loop, 
         FRAME_ANIMATE_ICONIFY_STEP_TIME, frame_animate_iconify, self,
                 g_direct_equal, NULL);
 
@@ -1093,7 +1093,7 @@ void frame_update_layout(gpointer _self, gboolean is_resize, gboolean is_fake)
             if (self->decorations & OB_FRAME_DECOR_HANDLE
                     && theme_config.handle_height > 0) {
                 XMoveResizeWindow(plugin.ob_display, self->handletop,
-                        theme_config.grip_width + self->bwidth + sidebwidth,
+                        theme_config.grip_width + self->bwidth + sidebwidth, 
                         FRAME_HANDLE_Y(self), self->width - (theme_config.grip_width
                                 + sidebwidth) * 2, self->bwidth);
                 XMapWindow(plugin.ob_display, self->handletop);
@@ -1108,13 +1108,13 @@ void frame_update_layout(gpointer _self, gboolean is_resize, gboolean is_fake)
                             theme_config.handle_height);
 
                     XMoveResizeWindow(plugin.ob_display, self->lgriptop,
-                            sidebwidth,
+                            sidebwidth, 
                             FRAME_HANDLE_Y(self), theme_config.grip_width
                                     + self->bwidth, self->bwidth);
                     XMoveResizeWindow(plugin.ob_display, self->rgriptop,
                             self->size.left + self->client_area.width
                                     + self->size.right - self->bwidth
-                                    - sidebwidth - theme_config.grip_width,
+                                    - sidebwidth - theme_config.grip_width, 
                             FRAME_HANDLE_Y(self), theme_config.grip_width
                                     + self->bwidth, self->bwidth);
 
@@ -1156,7 +1156,7 @@ void frame_update_layout(gpointer _self, gboolean is_resize, gboolean is_fake)
 
         if (self->decorations & OB_FRAME_DECOR_HANDLE
                 && theme_config.handle_height > 0) {
-            XMoveResizeWindow(plugin.ob_display, self->handle, sidebwidth,
+            XMoveResizeWindow(plugin.ob_display, self->handle, sidebwidth, 
             FRAME_HANDLE_Y(self) + self->bwidth, self->width,
                     theme_config.handle_height);
             XMapWindow(plugin.ob_display, self->handle);
@@ -1778,45 +1778,68 @@ void layout_title(ObDefaultFrame * self)
         XUnmapWindow(plugin.ob_display, self->label);
 }
 
-void frame_trigger(gpointer frame, ObFrameTrigger trigger_name)
+void trigger_none (gpointer self) {}
+void trigger_iconify(gpointer self) {}
+void trigger_uniconnity(gpointer self) {}
+void trigger_iconify_toggle(gpointer self) {}
+void trigger_shade(gpointer self) {}
+void trigger_unshade(gpointer self) {}
+void trigger_shade_toggle(gpointer self) {}
+void trigger_max(gpointer self) {}
+void trigger_unmax(gpointer self) {}
+void trigger_max_troggle(gpointer self) {}
+void trigger_max_vert(gpointer self) {OBDEFAULTFRAME(self)->max_vert = TRUE;}
+void trigger_unmax_vert(gpointer self) {OBDEFAULTFRAME(self)->max_vert = FALSE;}
+void trigger_max_toggle(gpointer self) {}
+void trigger_max_horz(gpointer self) {OBDEFAULTFRAME(self)->max_horz = TRUE;}
+void trigger_unmax_horz(gpointer self) {OBDEFAULTFRAME(self)->max_horz = FALSE;}
+void trigger_max_horz_toggle(gpointer self) {}
+void trigger_plugin1(gpointer self) {}
+void trigger_plugin2(gpointer self) {}
+void trigger_plugin3(gpointer self) {}
+void trigger_plugin4(gpointer self) {}
+void trigger_plugin5(gpointer self) {}
+void trigger_plugin6(gpointer self) {}
+void trigger_plugin7(gpointer self) {}
+void trigger_plugin8(gpointer self) {}
+void trigger_plugin9(gpointer self) {}
+
+void frame_trigger(gpointer self, ObFrameTrigger trigger_name)
 {
-    switch(trigger_name)
+
+    static void (*trigger_func[64])(gpointer) = { 
+            trigger_none,
+            trigger_iconify,
+            trigger_uniconnity,
+            trigger_iconify_toggle,
+            trigger_shade,
+            trigger_unshade,
+            trigger_shade_toggle,
+            trigger_max,
+            trigger_unmax,
+            trigger_max_troggle,
+            trigger_max_vert,
+            trigger_unmax_vert,
+            trigger_max_toggle,
+            trigger_max_horz,
+            trigger_unmax_horz,
+            trigger_max_horz_toggle,
+            trigger_plugin1,
+            trigger_plugin2,
+            trigger_plugin3,
+            trigger_plugin4,
+            trigger_plugin5,
+            trigger_plugin6,
+            trigger_plugin7,
+            trigger_plugin8,
+            trigger_plugin9,
+            NULL,
+    };
+    
+    void (*call_trigger_func)(gpointer) = trigger_func[trigger_name];
+    if(!call_trigger_func)
     {
-    case OB_TRIGGER_NORMAL:
-        /* TODO */
-        break;
-    case OB_TRIGGER_INCONIFIED:
-        /* TODO */
-        break;
-    case OB_TRIGGER_SHADED:
-        /* TODO */
-        break;
-    case OB_TRIGGER_MAX:
-        /* TODO */
-        break;
-    case OB_TRIGGER_MAX_VERT:
-        /* TODO */
-        break;
-    case OB_TRIGGER_MAX_HORZ:
-        /* TODO */
-        break;
-    case OB_TRIGGER_NO_BORDER:
-        /* TODO */
-        break;
-    case OB_TRIGGER_PLUGIN1:
-        /* TODO */
-        break;
-    case OB_TRIGGER_PLUGIN2:
-        /* TODO */
-        break;
-    case OB_TRIGGER_PLUGIN3:
-        /* TODO */
-        break;
-    case OB_TRIGGER_PLUGIN4:
-        /* TODO */
-        break;
-    default:
-        break;
+        call_trigger_func (self);
     }
 }
 
@@ -1863,8 +1886,8 @@ ObFramePlugin plugin = { 0, //gpointer handler;
         frame_is_visible, /* */
         frame_is_max_horz, /* */
         frame_is_max_vert, /* */
-        
-        NULL, /* */
+
+        frame_trigger, /* */
 
         load_theme_config, /* */
 
index c6b57814c7eda9663be76e6cf21ff8f2822d0e8c..fcfd854294ba5dfb545e4ed5f6601533a39cf839 100644 (file)
@@ -696,6 +696,8 @@ void client_unmanage(ObClient *self)
         }
 
         self->fullscreen = self->max_horz = self->max_vert = FALSE;
+        render_plugin->frame_trigger(self, OB_TRIGGER_UNMAX_VERT);
+        render_plugin->frame_trigger(self, OB_TRIGGER_UNMAX_HORZ);
         /* let it be moved and resized no matter what */
         self->functions = OB_CLIENT_FUNC_MOVE | OB_CLIENT_FUNC_RESIZE;
         self->decorations = 0; /* unmanaged windows have no decor */
@@ -885,8 +887,19 @@ static void client_restore_session_state(ObClient *self)
     self->max_vert = self->session->max_vert;
     self->undecorated = self->session->undecorated;
 
-    render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
-    render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
+    if (self->session->max_horz) {
+        render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_HORZ);
+    }
+    else {
+        render_plugin->frame_trigger(self->frame, OB_TRIGGER_UNMAX_HORZ);
+    }
+    
+    if (self->session->max_vert) {
+        render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_VERT);
+    }
+    else {
+        render_plugin->frame_trigger(self->frame, OB_TRIGGER_UNMAX_VERT);
+    }
 }
 
 static gboolean client_restore_session_stacking(ObClient *self)
@@ -1200,10 +1213,14 @@ static void client_get_state(ObClient *self)
                 self->skip_pager = TRUE;
             else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_FULLSCREEN))
                 self->fullscreen = TRUE;
-            else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT))
+            else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT)) {
                 self->max_vert = TRUE;
-            else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ))
+                render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_VERT);
+            }
+            else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ)) {
                 self->max_horz = TRUE;
+                render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_HORZ);
+            }
             else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_ABOVE))
                 self->above = TRUE;
             else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_BELOW))
@@ -1809,9 +1826,12 @@ static void client_change_allowed_actions(ObClient *self)
     if (!(self->functions & OB_CLIENT_FUNC_MAXIMIZE) && (self->max_horz ||
                                                          self->max_vert)) {
         if (self->frame) client_maximize(self, FALSE, 0);
-        else self->max_vert = self->max_horz = FALSE;
-        render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
-        render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
+        else {
+            self->max_vert = self->max_horz = FALSE;
+            render_plugin->frame_trigger (self->frame, OB_TRIGGER_UNMAX_VERT);
+            render_plugin->frame_trigger (self->frame, OB_TRIGGER_UNMAX_HORZ);
+        }
+
     }
 }
 
@@ -2348,7 +2368,7 @@ static void client_change_state(ObClient *self)
     OBT_PROP_SETA32(self->window, NET_WM_STATE, ATOM, netstate, num);
 
     if (self->frame)
-    render_plugin->frame_update_layout (self->frame, FALSE, FALSE);
+        render_plugin->frame_update_layout (self->frame, FALSE, FALSE);
 }
 
 ObClient *client_search_focus_tree(ObClient *self)
@@ -2692,8 +2712,6 @@ static void client_apply_startup_state(ObClient *self,
     render_plugin->frame_set_client_area (self->frame, self->area);
     render_plugin->frame_set_decorations (self->frame, self->decorations);
     render_plugin->frame_update_layout (self->frame, FALSE, FALSE);
-    render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
-    render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
     client_configure(self, x, y, w, h, FALSE, TRUE, FALSE);
 
     /* set the desktop hint, to make sure that it always exists */
@@ -3266,13 +3284,15 @@ void client_maximize(ObClient *self, gboolean max, gint dir)
         }
     }
 
-    if (dir == 0 || dir == 1) /* horz */
-        self->max_horz = max;
-    if (dir == 0 || dir == 2) /* vert */
-        self->max_vert = max;
+    if (dir == 0 || dir == 1) 
+        self->max_horz = max; /* horz */
+        render_plugin->frame_trigger(self->frame, max? OB_TRIGGER_MAX_HORZ : OB_TRIGGER_UNMAX_HORZ);
+    }
 
-    render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
-    render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
+    if (dir == 0 || dir == 2){
+        self->max_vert = max; /* vert */
+        render_plugin->frame_trigger(self->frame, max? OB_TRIGGER_MAX_VERT : OB_TRIGGER_UNMAX_VERT);
+    }
 
     client_change_state(self); /* change the state hints on the client */
 
index 6909eb2a2ed25c262e33b4a6d9627e753fc29245..28f04082dd4b3fea7919674a62f33913982e958e 100644 (file)
@@ -91,17 +91,31 @@ typedef enum
  * It's mimic signal (USR1 and USR2) */
 typedef enum
 {
-    OB_TRIGGER_NORMAL,
-    OB_TRIGGER_INCONIFIED,
-    OB_TRIGGER_SHADED,
+    OB_TRIGGER_NONE,
+    OB_TRIGGER_INCONIFY,
+    OB_TRIGGER_UNICONIFY,
+    OB_TRIGGER_INCONIFY_TOGGLE,
+    OB_TRIGGER_SHADE,
+    OB_TRIGGER_UNSHADE,
+    OB_TRIGGER_SHADE_TOGGLE,
     OB_TRIGGER_MAX,
+    OB_TRIGGER_UNMAX,
+    OB_TRIGGER_MAX_TOGGLE,
     OB_TRIGGER_MAX_VERT,
+    OB_TRIGGER_UNMAX_VERT,
+    OB_TRIGGER_MAX_VERT_TOGGLE,
     OB_TRIGGER_MAX_HORZ,
-    OB_TRIGGER_NO_BORDER,
+    OB_TRIGGER_UNMAX_HORZ,
+    OB_TRIGGER_MAX_HORZ_TOGGLE,
     OB_TRIGGER_PLUGIN1,
     OB_TRIGGER_PLUGIN2,
     OB_TRIGGER_PLUGIN3,
     OB_TRIGGER_PLUGIN4, /* ... */
+    OB_TRIGGER_PLUGIN5, /* ... */
+    OB_TRIGGER_PLUGIN6, /* ... */
+    OB_TRIGGER_PLUGIN7, /* ... */
+    OB_TRIGGER_PLUGIN8, /* ... */
+    OB_TRIGGER_PLUGIN9, /* ... */
 } ObFrameTrigger;
 
 struct _ObFramePlugin