]> Dogcows Code - chaz/tint2/commitdiff
WM menu in left and right padding
authorThierry Lorthiois <lorthiois@bbsoft.fr>
Wed, 12 Nov 2008 15:11:39 +0000 (15:11 +0000)
committerThierry Lorthiois <lorthiois@bbsoft.fr>
Wed, 12 Nov 2008 15:11:39 +0000 (15:11 +0000)
ChangeLog
README
src/panel.c
src/panel.h
src/server.h
src/tint.c
src/tint2
src/util/area.c
tintrc02

index 2a19b34faf11ba62fee91095a8c7f9a807004d9d..aff06a32af563ced9d5e82756e4bdedec87f5561 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 
-
+2008-11-12
+- panel's left and right padding feel like WM background
+  (right click open window managers's menu, ...)
 
 2008-11-02
 - fixed bugs with new design
diff --git a/README b/README
index 018c197f41b8e7226f259343256963bdc9a93493..1835446694047695608d6ff6a586793ce230ee6e 100644 (file)
--- a/README
+++ b/README
@@ -16,4 +16,15 @@ check http://code.google.com/p/tint2/
 for latest release, documentation and sample config file.
 
 
+---------------------------------------------------------
+FAQ:
+
+- How to get menu in tint2 panel ?
+use panel_padding = x y  with option x>1
+then put the mouse in left (or right) padding and right clic,
+tint2 will open the menu of your Window manager.
+
+
+
+
 
index f3bd2beaf5176330452c0f34b67315362a8fb25a..b9cbcf2dd341dda20a266143aa7fc3886df241b3 100644 (file)
 
 void visual_refresh ()
 {
-   if (!server.root_pmap) {
-      Pixmap wall = get_root_pixmap();
-
-      server.root_pmap = server_create_pixmap (panel.area.width, panel.area.height);
-
-      XCopyArea (server.dsp, wall, server.root_pmap, server.gc, server.posx, server.posy, panel.area.width, panel.area.height, 0, 0);
-   
-      redraw (&panel.area);
-   }
+   if (!panel.area.pmap)
+      set_panel_background(); 
    
    if (server.pmap) XFreePixmap (server.dsp, server.pmap);
    server.pmap = server_create_pixmap (panel.area.width, panel.area.height);
+   XCopyArea (server.dsp, panel.area.pmap, server.pmap, server.gc, 0, 0, panel.area.width, panel.area.height, 0, 0);
 
-   XCopyArea (server.dsp, server.root_pmap, server.pmap, server.gc, 0, 0, panel.area.width, panel.area.height, 0, 0);
-         
-   draw (&panel.area);
+   // draw child object
+   GSList *l = panel.area.list;
+   for (; l ; l = l->next)
+      draw (l->data);
 
-   XCopyArea (server.dsp, server.pmap, window.main_win, server.gc, 0, 0, panel.area.width, panel.area.height, 0, 0);
-   XFlush(server.dsp);
+   // main_win doesn't include panel.area.paddingx, so we have WM capabilities on left and right.
+   XCopyArea (server.dsp, server.pmap, window.main_win, server.gc, panel.area.paddingx, 0, panel.area.width-(2*panel.area.paddingx), panel.area.height, 0, 0);
+   XFlush (server.dsp);
    panel.refresh = 0;
 }
 
@@ -125,9 +121,10 @@ void window_draw_panel ()
    /* Catch some events */
    XSetWindowAttributes att = { ParentRelative, 0L, 0, 0L, 0, 0, Always, 0L, 0L, False, ExposureMask|ButtonPressMask|ButtonReleaseMask, NoEventMask, False, 0, 0 };
                
-   /* XCreateWindow(display, parent, x, y, w, h, border, depth, class, visual, mask, attrib) */
+   // XCreateWindow(display, parent, x, y, w, h, border, depth, class, visual, mask, attrib)
+   // main_win doesn't include panel.area.paddingx, so we have WM capabilities on left and right.
    if (window.main_win) XDestroyWindow(server.dsp, window.main_win);
-   win = XCreateWindow (server.dsp, server.root_win, server.posx, server.posy, panel.area.width, panel.area.height, 0, server.depth, InputOutput, CopyFromParent, CWEventMask, &att);
+   win = XCreateWindow (server.dsp, server.root_win, server.posx+panel.area.paddingx, server.posy, panel.area.width-(2*panel.area.paddingx), panel.area.height, 0, server.depth, InputOutput, CopyFromParent, CWEventMask, &att);
 
    set_panel_properties (win);
    window.main_win = win;
@@ -136,7 +133,9 @@ void window_draw_panel ()
    if (server.gc) XFree(server.gc);
    XGCValues gcValues;
    server.gc = XCreateGC(server.dsp, win, (unsigned long) 0, &gcValues);
-   
+   if (server.gc_root) XFree(server.gc_root);
+   server.gc_root = XCreateGC(server.dsp, server.root_win, (unsigned long) 0, &gcValues);
+
    XMapWindow (server.dsp, win);
    XFlush (server.dsp);
 }
@@ -164,7 +163,35 @@ void visible_object()
          panel.area.list = g_slist_append(panel.area.list, taskbar);
       }
    }
+   redraw(&panel.area);
    panel.refresh = 1;
 }
 
 
+void set_panel_background()
+{
+   Pixmap wall = get_root_pixmap();
+
+   panel.area.pmap = server_create_pixmap (panel.area.width, panel.area.height);
+
+   // add layer of root pixmap
+   XCopyArea (server.dsp, wall, panel.area.pmap, server.gc, server.posx, server.posy, panel.area.width, panel.area.height, 0, 0);
+
+   // draw background panel
+   cairo_surface_t *cs;
+   cairo_t *c;
+   cs = cairo_xlib_surface_create (server.dsp, panel.area.pmap, server.visual, panel.area.width, panel.area.height);
+   c = cairo_create (cs);
+
+   draw_background (&panel.area, c);
+   
+   cairo_destroy (c);
+   cairo_surface_destroy (cs);
+
+   // copy background panel on desktop window
+   XCopyArea (server.dsp, panel.area.pmap, server.root_win, server.gc_root, 0, 0, panel.area.width, panel.area.height, server.posx, server.posy);
+
+   redraw (&panel.area);
+}
+
+
index 54a74e9792c356c820d20684d869bbbe446112c9..4a3e245622be0341366351f68017119d81d49a56 100644 (file)
@@ -78,6 +78,6 @@ void visual_refresh ();
 void set_panel_properties (Window win);
 void window_draw_panel ();
 void visible_object();
-
+void set_panel_background();
 
 #endif
index c4225db9bd1365e9c7b129e2f018f6383e414f10..e6e230e49892b3406eaf37ca9d4dfd92cdba4ab8 100644 (file)
@@ -79,8 +79,8 @@ typedef struct
         Visual *visual;
         int posx, posy;
         Pixmap pmap;
-        Pixmap root_pmap;
         GC gc;
+        GC gc_root;
         Global_atom atom;
 } Server_global;
 
index b0959ec8f9630d9bb845a8ca1e0fbe66525fc6fe..46c0c22dd46bd00d79e905ff99d87aa8c36b6095 100644 (file)
@@ -97,7 +97,7 @@ void init ()
    /* Catch events */
    XSelectInput (server.dsp, server.root_win, PropertyChangeMask|StructureNotifyMask);
 
-   setlocale(LC_ALL, "");
+   setlocale (LC_ALL, "");
 }
 
 
@@ -237,7 +237,6 @@ void event_property_notify (Window win, Atom at)
       else if (at == server.atom._NET_NUMBER_OF_DESKTOPS) {
          config_taskbar();
          visible_object();
-         redraw(&panel.area);
       }
       /* Change desktop */
       else if (at == server.atom._NET_CURRENT_DESKTOP) {
@@ -265,10 +264,8 @@ void event_property_notify (Window win, Atom at)
       }
       /* Wallpaper changed */
       else if (at == server.atom._XROOTPMAP_ID) {
-         XFreePixmap (server.dsp, server.root_pmap);
-         server.root_pmap = 0;
-         redraw(&panel.area);
-         panel.clock.area.redraw = 1;
+         XFreePixmap (server.dsp, panel.area.pmap);
+         panel.area.pmap = 0;
          panel.refresh = 1;
       }
    }
@@ -354,8 +351,8 @@ int main (int argc, char *argv[])
    init ();
 
 load_config:
-   if (server.root_pmap) XFreePixmap (server.dsp, server.root_pmap);
-   server.root_pmap = 0;                          
+   if (panel.area.pmap) XFreePixmap (server.dsp, panel.area.pmap);
+   panel.area.pmap = 0;                           
    // read tint2rc config
    i = 0;
    if (c != -1)
@@ -401,7 +398,8 @@ load_config:
                   break;
             
                case Expose:
-                  XCopyArea (server.dsp, server.pmap, window.main_win, server.gc, 0, 0, panel.area.width, panel.area.height, 0, 0);
+                  XCopyArea (server.dsp, panel.area.pmap, server.root_win, server.gc_root, 0, 0, panel.area.width, panel.area.height, server.posx, server.posy);
+                  XCopyArea (server.dsp, server.pmap, window.main_win, server.gc, panel.area.paddingx, 0, panel.area.width-(2*panel.area.paddingx), panel.area.height, 0, 0);
                   break;
 
                case PropertyNotify:
index ee44748c48f822df15c394af9307407a623935a2..fcc2f2dd82a54beebe0b02a89726ec73a341f9b7 100755 (executable)
Binary files a/src/tint2 and b/src/tint2 differ
index c1347a195a94822201a8c8ef62a8f53717b81bd8..6585c3e4e1018005c61d2c2e301e4da07640c053 100644 (file)
@@ -70,11 +70,9 @@ int draw (Area *a)
    XCopyArea (server.dsp, a->pmap, server.pmap, server.gc, 0, 0, a->width, a->height, a->posx, a->posy);
    
    GSList *l = a->list;
-   if (l) {
-      // draw child object
-      for (; l ; l = l->next)
-         draw(l->data);
-   }
+   // draw child object
+   for (; l ; l = l->next)
+      draw(l->data);
 
    //printf("end draw area\n");
    return ret;
index c8bdcf736a6b0c296480550b4c11ba7557565c16..4a2c72da7e3fdff7ad2fec8bebdbcd7fbe6a7c1d 100644 (file)
--- a/tintrc02
+++ b/tintrc02
@@ -23,7 +23,7 @@ panel_monitor = 1
 panel_position = bottom right
 panel_size = 0 27
 panel_margin = 0 0
-panel_padding = 3 2
+panel_padding = 4 2
 font_shadow = 0
 panel_background_id = 1
 
This page took 0.033301 seconds and 4 git commands to generate.