]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
oops extra menu_layout
[chaz/openbox] / openbox / client.c
index 0dab31d0727ee845c43e4ddab6e176522a6b6870..3ed2e9df416bd6abd505c3d6cfedcaeeabdafb82 100644 (file)
@@ -67,7 +67,8 @@ void client_set_list()
     } else
        windows = NULL;
 
-    PROP_SETA32(ob_root, net_client_list, window, (guint32*)windows, size);
+    PROP_SETA32(RootWindow(ob_display, ob_screen),
+                net_client_list, window, (guint32*)windows, size);
 
     if (windows)
        g_free(windows);
@@ -113,7 +114,8 @@ void client_manage_all()
     XWMHints *wmhints;
     XWindowAttributes attrib;
 
-    XQueryTree(ob_display, ob_root, &w, &w, &children, &nchild);
+    XQueryTree(ob_display, RootWindow(ob_display, ob_screen),
+               &w, &w, &children, &nchild);
 
     /* remove all icon windows from the list */
     for (i = 0; i < nchild; i++) {
@@ -254,7 +256,7 @@ void client_manage(Window window)
     focus_order_add_new(self);
 
     /* focus the new window? */
-    if (ob_state != OB_STATE_STARTING && config_focus_new &&
+    if (ob_state() != OB_STATE_STARTING && config_focus_new &&
         (self->type == OB_CLIENT_TYPE_NORMAL || self->type == OB_CLIENT_TYPE_DIALOG)) {
         gboolean group_foc = FALSE;
         
@@ -316,8 +318,8 @@ void client_unmanage_all()
 /* called by client_unmanage() to close any menus referencing this client */
 void client_close_menus(gpointer key, gpointer value, gpointer self)
 {
-    if (((Menu *)value)->client == (ObClient *)self)
-        menu_hide((Menu *)value);
+    if (((ObMenu *)value)->client == (ObClient *)self)
+        menu_hide((ObMenu *)value);
 }
 
 void client_unmanage(ObClient *self)
@@ -403,7 +405,7 @@ void client_unmanage(ObClient *self)
     frame_release_client(self->frame, self);
     self->frame = NULL;
      
-    if (ob_state != OB_STATE_EXITING) {
+    if (ob_state() != OB_STATE_EXITING) {
        /* these values should not be persisted across a window
           unmapping/mapping */
        prop_erase(self->window, prop_atoms.net_wm_desktop);
@@ -542,7 +544,7 @@ static void client_get_all(ObClient *self)
     self->layer = -1;
     self->urgent = FALSE;
     self->positioned = FALSE;
-    self->disabled_decorations = 0;
+    self->decorate = TRUE;
     self->group = NULL;
     self->nicons = 0;
 
@@ -700,7 +702,7 @@ void client_update_transient_for(ObClient *self)
                    group */
                 if (t == self->group->leader ||
                     t == None ||
-                    t == ob_root) {
+                    t == RootWindow(ob_display, ob_screen)) {
                     /* window is a transient for its group! */
                     c = OB_TRAN_GROUP;
                 }
@@ -912,22 +914,28 @@ void client_update_normal_hints(ObClient *self)
 void client_setup_decor_and_functions(ObClient *self)
 {
     /* start with everything (cept fullscreen) */
-    self->decorations = Decor_Titlebar | Decor_Handle | Decor_Border |
-       Decor_Icon | Decor_AllDesktops | Decor_Iconify | Decor_Maximize |
-        Decor_Shade;
-    self->functions = OB_CLIENT_FUNC_RESIZE | OB_CLIENT_FUNC_MOVE |
-        OB_CLIENT_FUNC_ICONIFY | OB_CLIENT_FUNC_MAXIMIZE |
-        OB_CLIENT_FUNC_SHADE;
+    self->decorations = (OB_FRAME_DECOR_TITLEBAR |
+                         OB_FRAME_DECOR_HANDLE |
+                         OB_FRAME_DECOR_GRIPS |
+                         OB_FRAME_DECOR_BORDER |
+                         OB_FRAME_DECOR_ICON |
+                         OB_FRAME_DECOR_ALLDESKTOPS |
+                         OB_FRAME_DECOR_ICONIFY |
+                         OB_FRAME_DECOR_MAXIMIZE |
+                         OB_FRAME_DECOR_SHADE);
+    self->functions = (OB_CLIENT_FUNC_RESIZE |
+                       OB_CLIENT_FUNC_MOVE |
+                       OB_CLIENT_FUNC_ICONIFY |
+                       OB_CLIENT_FUNC_MAXIMIZE |
+                       OB_CLIENT_FUNC_SHADE);
     if (self->delete_window) {
-       self->decorations |= Decor_Close;
        self->functions |= OB_CLIENT_FUNC_CLOSE;
+        self->decorations |= OB_FRAME_DECOR_CLOSE;
     }
 
     if (!(self->min_size.width < self->max_size.width ||
-         self->min_size.height < self->max_size.height)) {
-       self->decorations &= ~(Decor_Maximize | Decor_Handle);
+         self->min_size.height < self->max_size.height))
        self->functions &= ~OB_CLIENT_FUNC_RESIZE;
-    }
 
     switch (self->type) {
     case OB_CLIENT_TYPE_NORMAL:
@@ -939,14 +947,12 @@ void client_setup_decor_and_functions(ObClient *self)
     case OB_CLIENT_TYPE_DIALOG:
     case OB_CLIENT_TYPE_UTILITY:
        /* these windows cannot be maximized */
-       self->decorations &= ~Decor_Maximize;
        self->functions &= ~OB_CLIENT_FUNC_MAXIMIZE;
        break;
 
     case OB_CLIENT_TYPE_MENU:
     case OB_CLIENT_TYPE_TOOLBAR:
        /* these windows get less functionality */
-       self->decorations &= ~(Decor_Iconify | Decor_Handle);
        self->functions &= ~(OB_CLIENT_FUNC_ICONIFY | OB_CLIENT_FUNC_RESIZE);
        break;
 
@@ -963,16 +969,11 @@ void client_setup_decor_and_functions(ObClient *self)
        decor and functionality */
     if (self->mwmhints.flags & OB_MWM_FLAG_DECORATIONS) {
        if (! (self->mwmhints.decorations & OB_MWM_DECOR_ALL)) {
-           if (! (self->mwmhints.decorations & OB_MWM_DECOR_BORDER))
-               self->decorations &= ~Decor_Border;
-           if (! (self->mwmhints.decorations & OB_MWM_DECOR_HANDLE))
-               self->decorations &= ~Decor_Handle;
-           if (! (self->mwmhints.decorations & OB_MWM_DECOR_TITLE))
-               self->decorations &= ~Decor_Titlebar;
-           if (! (self->mwmhints.decorations & OB_MWM_DECOR_ICONIFY))
-               self->decorations &= ~Decor_Iconify;
-           if (! (self->mwmhints.decorations & OB_MWM_DECOR_MAXIMIZE))
-               self->decorations &= ~Decor_Maximize;
+           if (! ((self->mwmhints.decorations & OB_MWM_DECOR_HANDLE) ||
+                   (self->mwmhints.decorations & OB_MWM_DECOR_TITLE)))
+                /* if the mwm hints request no handle or title, then all
+                   decorations are disabled */
+               self->decorations = 0;
        }
     }
 
@@ -982,43 +983,40 @@ void client_setup_decor_and_functions(ObClient *self)
                self->functions &= ~OB_CLIENT_FUNC_RESIZE;
            if (! (self->mwmhints.functions & OB_MWM_FUNC_MOVE))
                self->functions &= ~OB_CLIENT_FUNC_MOVE;
+            /* dont let mwm hints kill any buttons
            if (! (self->mwmhints.functions & OB_MWM_FUNC_ICONIFY))
                self->functions &= ~OB_CLIENT_FUNC_ICONIFY;
            if (! (self->mwmhints.functions & OB_MWM_FUNC_MAXIMIZE))
                self->functions &= ~OB_CLIENT_FUNC_MAXIMIZE;
+            */
            /* dont let mwm hints kill the close button
               if (! (self->mwmhints.functions & MwmFunc_Close))
-              self->functions &= ~Func_Close; */
+              self->functions &= ~OB_CLIENT_FUNC_CLOSE; */
        }
     }
 
+    if (!(self->functions & OB_CLIENT_FUNC_SHADE))
+        self->decorations &= ~OB_FRAME_DECOR_SHADE;
+    if (!(self->functions & OB_CLIENT_FUNC_ICONIFY))
+        self->decorations &= ~OB_FRAME_DECOR_ICONIFY;
+    if (!(self->functions & OB_CLIENT_FUNC_RESIZE))
+        self->decorations &= ~OB_FRAME_DECOR_GRIPS;
+
     /* can't maximize without moving/resizing */
-    if (!((self->functions & OB_CLIENT_FUNC_MOVE) &&
-          (self->functions & OB_CLIENT_FUNC_RESIZE)))
-       self->functions &= ~(OB_CLIENT_FUNC_MAXIMIZE |
-                             OB_CLIENT_FUNC_FULLSCREEN);
-
-    /* finally, user specified disabled decorations are applied to subtract
-       decorations */
-    if (self->disabled_decorations & Decor_Titlebar)
-       self->decorations &= ~Decor_Titlebar;
-    if (self->disabled_decorations & Decor_Handle)
-       self->decorations &= ~Decor_Handle;
-    if (self->disabled_decorations & Decor_Border)
-       self->decorations &= ~Decor_Border;
-    if (self->disabled_decorations & Decor_Iconify)
-       self->decorations &= ~Decor_Iconify;
-    if (self->disabled_decorations & Decor_Maximize)
-       self->decorations &= ~Decor_Maximize;
-    if (self->disabled_decorations & Decor_AllDesktops)
-       self->decorations &= ~Decor_AllDesktops;
-    if (self->disabled_decorations & Decor_Shade)
-       self->decorations &= ~Decor_Shade;
-    if (self->disabled_decorations & Decor_Close)
-       self->decorations &= ~Decor_Close;
+    if (!((self->functions & OB_CLIENT_FUNC_MAXIMIZE) &&
+          (self->functions & OB_CLIENT_FUNC_MOVE) &&
+          (self->functions & OB_CLIENT_FUNC_RESIZE))) {
+       self->functions &= ~OB_CLIENT_FUNC_MAXIMIZE;
+        self->decorations &= ~OB_FRAME_DECOR_MAXIMIZE;
+    }
+
+    /* finally, the user can have requested no decorations, which overrides
+       everything */
+    if (!self->decorate)
+        self->decorations = 0;
 
     /* if we don't have a titlebar, then we cannot shade! */
-    if (!(self->decorations & Decor_Titlebar))
+    if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR))
        self->functions &= ~OB_CLIENT_FUNC_SHADE;
 
     /* now we need to check against rules for the client's current state */
@@ -1123,7 +1121,7 @@ void client_update_wmhints(ObClient *self)
 
        /* only do this when first managing the window *AND* when we aren't
            starting up! */
-       if (ob_state != OB_STATE_STARTING && self->frame == NULL)
+       if (ob_state() != OB_STATE_STARTING && self->frame == NULL)
             if (hints->flags & StateHint)
                 self->iconic = hints->initial_state == IconicState;
 
@@ -2427,7 +2425,10 @@ void client_activate(ObClient *self)
     if (client_normal(self) && screen_showing_desktop)
         screen_show_desktop(FALSE);
     if (self->iconic)
-        client_iconify(self, FALSE, TRUE);
+        client_iconify(self, FALSE, FALSE);
+    if (self->desktop != DESKTOP_ALL &&
+        self->desktop != screen_desktop)
+        screen_set_desktop(self->desktop);
     else if (!self->frame->visible)
         /* if its not visible for other reasons, then don't mess
            with it */
This page took 0.025537 seconds and 4 git commands to generate.