]> Dogcows Code - chaz/openbox/blobdiff - openbox/popup.c
dont need client.h in this header
[chaz/openbox] / openbox / popup.c
index fa003ec855a0a10a28dc47416a31f62bffd04acf..769b942cfa5f27b3404d9db74570be9595ed238a 100644 (file)
@@ -1,5 +1,6 @@
 #include "openbox.h"
 #include "frame.h"
+#include "client.h"
 #include "window.h"
 #include "stacking.h"
 #include "render/render.h"
@@ -26,33 +27,52 @@ typedef struct Popup {
 
 Popup *popup_new(gboolean hasicon)
 {
+    XSetWindowAttributes attrib;
     Popup *self = g_new(Popup, 1);
+
     self->obwin.type = Window_Internal;
     self->hasicon = hasicon;
-    self->bg = None;
     self->a_text = NULL;
     self->gravity = NorthWestGravity;
     self->x = self->y = self->w = self->h = 0;
     self->mapped = FALSE;
+    self->a_bg = self->a_icon = self->a_text = NULL;
+
+    attrib.override_redirect = True;
+    self->bg = XCreateWindow(ob_display, ob_root,
+                             0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
+                             InputOutput, RrVisual(ob_rr_inst),
+                             CWOverrideRedirect, &attrib);
+    
+    self->text = XCreateWindow(ob_display, self->bg,
+                               0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
+                               InputOutput, RrVisual(ob_rr_inst), 0, NULL);
+
+    if (self->hasicon)
+        self->icon = XCreateWindow(ob_display, self->bg,
+                                   0, 0, 1, 1, 0,
+                                   RrDepth(ob_rr_inst), InputOutput,
+                                   RrVisual(ob_rr_inst), 0, NULL);
+
+    XMapWindow(ob_display, self->text);
+    XMapWindow(ob_display, self->icon);
+
     stacking_add(INTERNAL_AS_WINDOW(self));
-    stacking_raise(INTERNAL_AS_WINDOW(self));
     return self;
 }
 
 void popup_free(Popup *self)
 {
-    if (self->bg) {
+    if (self) {
         XDestroyWindow(ob_display, self->bg);
         XDestroyWindow(ob_display, self->text);
         XDestroyWindow(ob_display, self->icon);
         RrAppearanceFree(self->a_bg);
-        if (self->hasicon)
-            RrAppearanceFree(self->a_icon);
-    }
-    if (self->a_text)
+        RrAppearanceFree(self->a_icon);
         RrAppearanceFree(self->a_text);
-    stacking_remove(self);
-    g_free(self);
+        stacking_remove(self);
+        g_free(self);
+    }
 }
 
 void popup_position(Popup *self, int gravity, int x, int y)
@@ -86,43 +106,23 @@ void popup_size_to_string(Popup *self, char *text)
     self->w = textw + iconw + ob_rr_theme->bevel * (self->hasicon ? 3 : 2);
 }
 
-void popup_show(Popup *self, char *text, Icon *icon)
+void popup_show(Popup *self, char *text, ObClientIcon *icon)
 {
-    XSetWindowAttributes attrib;
     int x, y, w, h;
     int textw, texth;
     int iconw;
 
     /* create the shit if needed */
-    if (!self->bg) {
-        attrib.override_redirect = True;
-        self->bg = XCreateWindow(ob_display, ob_root,
-                                 0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
-                                 InputOutput, RrVisual(ob_rr_inst),
-                                 CWOverrideRedirect, &attrib);
-
-        XSetWindowBorderWidth(ob_display, self->bg, ob_rr_theme->bwidth);
-        XSetWindowBorder(ob_display, self->bg, ob_rr_theme->b_color->pixel);
-
-        self->text = XCreateWindow(ob_display, self->bg,
-                                   0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
-                                   InputOutput, RrVisual(ob_rr_inst), 0, NULL);
-        if (self->hasicon)
-            self->icon = XCreateWindow(ob_display, self->bg,
-                                       0, 0, 1, 1, 0,
-                                       RrDepth(ob_rr_inst), InputOutput,
-                                       RrVisual(ob_rr_inst), 0, NULL);
-
-        XMapWindow(ob_display, self->text);
-        XMapWindow(ob_display, self->icon);
-
+    if (!self->a_bg)
         self->a_bg = RrAppearanceCopy(ob_rr_theme->app_hilite_bg);
-        if (self->hasicon)
-            self->a_icon = RrAppearanceCopy(ob_rr_theme->app_icon);
-    }
+    if (self->hasicon && !self->a_icon)
+        self->a_icon = RrAppearanceCopy(ob_rr_theme->app_icon);
     if (!self->a_text)
         self->a_text = RrAppearanceCopy(ob_rr_theme->app_hilite_label);
 
+    XSetWindowBorderWidth(ob_display, self->bg, ob_rr_theme->bwidth);
+    XSetWindowBorder(ob_display, self->bg, ob_rr_theme->b_color->pixel);
+
     /* set up the textures */
     self->a_text->texture[0].data.text.string = text;
     if (self->hasicon) {
This page took 0.024426 seconds and 4 git commands to generate.