]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
fix reversed variable name and add a little comment to the magic menu code
[chaz/openbox] / openbox / client.c
index de66ac236345b9797e7d0f237c893dcbb76f2174..05cf9acde37cec81531fcf9997a6adb777fe304e 100644 (file)
@@ -134,7 +134,7 @@ void client_set_list()
 }
 
 /*
-  void client_foreach_transient(ObClient *self, ObClientForeachFunc func, void *data)
+  void client_foreach_transient(ObClient *self, ObClientForeachFunc func, gpointer data)
   {
   GSList *it;
 
@@ -144,7 +144,7 @@ void client_set_list()
   }
   }
 
-  void client_foreach_ancestor(ObClient *self, ObClientForeachFunc func, void *data)
+  void client_foreach_ancestor(ObClient *self, ObClientForeachFunc func, gpointer data)
   {
   if (self->transient_for) {
   if (self->transient_for != OB_TRAN_GROUP) {
@@ -415,6 +415,10 @@ void client_unmanage(ObClient *self)
     keyboard_grab_for_client(self, FALSE);
     mouse_grab_for_client(self, FALSE);
 
+    /* potentially fix focusLast */
+    if (config_focus_last)
+        grab_pointer(TRUE, OB_CURSOR_NONE);
+
     /* remove the window from our save set */
     XChangeSaveSet(ob_display, self->window, SetModeDelete);
 
@@ -518,6 +522,9 @@ void client_unmanage(ObClient *self)
      
     /* update the list hints */
     client_set_list();
+
+    if (config_focus_last)
+        grab_pointer(FALSE, OB_CURSOR_NONE);
 }
 
 static void client_urgent_notify(ObClient *self)
@@ -720,6 +727,11 @@ static void client_get_all(ObClient *self)
     client_get_mwm_hints(self);
     client_get_type(self);/* this can change the mwmhints for special cases */
 
+    /* The transient hint is used to pick a type, but the type can also affect
+       transiency (dialogs are always made transients). This is Havoc's idea,
+       but it is needed to make some apps work right (eg tsclient). */
+    client_update_transient_for(self);
+
     client_get_state(self);
 
     {
@@ -928,6 +940,9 @@ void client_update_transient_for(ObClient *self)
                 }
             }
         }
+    } else if (self->type == OB_CLIENT_TYPE_DIALOG && self->group) {
+        self->transient = TRUE;
+        target = OB_TRAN_GROUP;
     } else
         self->transient = FALSE;
 
@@ -1242,7 +1257,7 @@ void client_setup_decor_and_functions(ObClient *self)
     /* finally, the user can have requested no decorations, which overrides
        everything (but doesnt give it a border if it doesnt have one) */
     if (self->undecorated)
-        self->decorations &= OB_FRAME_DECOR_BORDER;
+        self->decorations = 0; //&= OB_FRAME_DECOR_BORDER;
 
     /* if we don't have a titlebar, then we cannot shade! */
     if (!(self->decorations & OB_FRAME_DECOR_TITLEBAR))
@@ -1490,6 +1505,12 @@ void client_update_title(ObClient *self)
         data = vdata;
     }
 
+    // http://developer.gnome.org/projects/gup/hig/draft_hig_new/windows-alert.html
+    if (self->transient)
+        data = '\0';
+    else
+        data = g_strdup("Unnamed Window");
+
     PROP_SETS(self->window, net_wm_visible_icon_name, data);
 
     self->icon_title = data;
@@ -2038,26 +2059,28 @@ void client_configure_full(ObClient *self, ObCorner anchor,
         w -= self->base_size.width;
         h -= self->base_size.height;
 
-        if (self->min_ratio)
-            if (h * self->min_ratio > w) {
-                h = (gint)(w / self->min_ratio);
+        if (!self->fullscreen) {
+            if (self->min_ratio)
+                if (h * self->min_ratio > w) {
+                    h = (gint)(w / self->min_ratio);
 
-                /* you cannot resize to nothing */
-                if (h < 1) {
-                    h = 1;
-                    w = (gint)(h * self->min_ratio);
+                    /* you cannot resize to nothing */
+                    if (h < 1) {
+                        h = 1;
+                        w = (gint)(h * self->min_ratio);
+                    }
                 }
-            }
-        if (self->max_ratio)
-            if (h * self->max_ratio < w) {
-                h = (gint)(w / self->max_ratio);
-
-                /* you cannot resize to nothing */
-                if (h < 1) {
-                    h = 1;
-                    w = (gint)(h * self->min_ratio);
+            if (self->max_ratio)
+                if (h * self->max_ratio < w) {
+                    h = (gint)(w / self->max_ratio);
+
+                    /* you cannot resize to nothing */
+                    if (h < 1) {
+                        h = 1;
+                        w = (gint)(h * self->min_ratio);
+                    }
                 }
-            }
+        }
 
         w += self->base_size.width;
         h += self->base_size.height;
@@ -2093,7 +2116,7 @@ void client_configure_full(ObClient *self, ObCorner anchor,
        resizing in redraw mode */
     send_resize_client = ((!user && resized) ||
                           (user && (final ||
-                                    (resized && config_redraw_resize))));
+                                    (resized && config_resize_redraw))));
 
     /* if the client is enlarging, the resize the client before the frame */
     if (send_resize_client && user && (w > oldw || h > oldh))
This page took 0.025544 seconds and 4 git commands to generate.