]> Dogcows Code - chaz/tint2/commitdiff
add mouse action : maximize_restore, fixed issue 125
authorThierry Lorthiois <lorthiois@bbsoft.fr>
Sun, 9 Aug 2009 15:57:18 +0000 (15:57 +0000)
committerThierry Lorthiois <lorthiois@bbsoft.fr>
Sun, 9 Aug 2009 15:57:18 +0000 (15:57 +0000)
ChangeLog
src/config.c
src/server.c
src/server.h
src/tint.c
src/util/common.h
src/util/window.c
src/util/window.h

index 9d2f8294d26b43db1da22c0f86c113264545eff7..4a34333dc285454a1a032599358b5d24891e32df 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-08-09
+- add mouse action : maximize_restore
+- fixed issue 125
+
 2009-07-28
 - some tint2conf code
 
index 0a1d13a18bf66c8e0eeee5e42c7d6d3136f2ba19..f1b4655b50ae53a197435b020a1fd5b4c59e9b83 100644 (file)
@@ -226,6 +226,8 @@ void get_action (char *event, int *action)
       *action = SHADE;
    else if (strcmp (event, "toggle_iconify") == 0)
       *action = TOGGLE_ICONIFY;
+   else if (strcmp (event, "maximize_restore") == 0)
+      *action = MAXIMIZE_RESTORE;
 }
 
 
@@ -664,8 +666,10 @@ int parse_line (const char *line)
 void config_finish ()
 {
    if (panel_config->monitor > (server.nb_monitor-1)) {
-      fprintf(stderr, "tint2 exit : monitor %d not found.\n", panel_config->monitor+1);
-      exit(0);
+               // server.nb_monitor minimum value is 1 (see get_monitors_and_desktops())
+               // and panel_config->monitor is higher
+               fprintf(stderr, "warning : monitor not found. tint2 default to monitor 1.\n");
+               panel_config->monitor = 0;
    }
 
        // alloc panels
index 9a448a70dba68fba05047e815d3b0583e9c13a45..1c7b4cda18e821d3ad9c4657d539567ffb10b253 100644 (file)
@@ -54,6 +54,8 @@ void server_init_atoms ()
    server.atom._NET_WM_DESKTOP = XInternAtom (server.dsp, "_NET_WM_DESKTOP", False);
    server.atom.WM_STATE = XInternAtom (server.dsp, "WM_STATE", False);
    server.atom._NET_WM_STATE = XInternAtom (server.dsp, "_NET_WM_STATE", False);
+   server.atom._NET_WM_STATE_MAXIMIZED_VERT = XInternAtom (server.dsp, "_NET_WM_STATE_MAXIMIZED_VERT", False);
+   server.atom._NET_WM_STATE_MAXIMIZED_HORZ = XInternAtom (server.dsp, "_NET_WM_STATE_MAXIMIZED_HORZ", False);
    server.atom._NET_WM_STATE_SHADED = XInternAtom (server.dsp, "_NET_WM_STATE_SHADED", False);
    server.atom._NET_WM_STATE_BELOW = XInternAtom (server.dsp, "_NET_WM_STATE_BELOW", False);
    server.atom._NET_WM_STATE_MODAL = XInternAtom (server.dsp, "_NET_WM_STATE_MODAL", False);
index e85a091d3977a6541c0cf2314864d9f4f3b18f40..48931ef68ca871c4a8317f364f3d82952b8435ec 100644 (file)
@@ -37,6 +37,8 @@ typedef struct Global_atom
        Atom _NET_WM_DESKTOP;
        Atom WM_STATE;
        Atom _NET_WM_STATE;
+       Atom _NET_WM_STATE_MAXIMIZED_VERT;
+       Atom _NET_WM_STATE_MAXIMIZED_HORZ;
        Atom _NET_WM_STATE_SHADED;
        Atom _NET_WM_STATE_BELOW;
        Atom _NET_WM_STATE_MODAL;
index dc90b02220b5e220211383b7dcfb2b9a8a989e44..ffd1c5cd8fabf8b0c1b6bb051d97da93815a2a41 100644 (file)
@@ -53,7 +53,7 @@ void init ()
        signal(SIGINT, signal_handler);
        signal(SIGTERM, signal_handler);
        signal(SIGHUP, signal_handler);
-       signal(SIGCLD, SIG_IGN);                // don't have to wait() after fork()
+       signal(SIGCHLD, SIG_IGN);               // don't have to wait() after fork()
 
    // set global data
    memset(&server, 0, sizeof(Server_global));
@@ -114,24 +114,33 @@ void cleanup()
 
 void window_action (Task *tsk, int action)
 {
-   switch (action) {
-      case CLOSE:
-         set_close (tsk->win);
-         break;
-      case TOGGLE:
-         set_active(tsk->win);
-         break;
-      case ICONIFY:
-         XIconifyWindow (server.dsp, tsk->win, server.screen);
-         break;
-      case TOGGLE_ICONIFY:
-         if (tsk == task_active) XIconifyWindow (server.dsp, tsk->win, server.screen);
-         else set_active (tsk->win);
-         break;
-      case SHADE:
-         window_toggle_shade (tsk->win);
-         break;
-   }
+       switch (action) {
+               case CLOSE:
+                       set_close (tsk->win);
+                       break;
+               case TOGGLE:
+                       set_active(tsk->win);
+                       break;
+               case ICONIFY:
+                       XIconifyWindow (server.dsp, tsk->win, server.screen);
+                       break;
+               case TOGGLE_ICONIFY:
+                       if (tsk == task_active) XIconifyWindow (server.dsp, tsk->win, server.screen);
+                       else set_active (tsk->win);
+                       break;
+               case SHADE:
+                       window_toggle_shade (tsk->win);
+                       break;
+               case MAXIMIZE_RESTORE:
+                       window_maximize_restore (tsk->win);
+                       break;
+               case MAXIMIZE:
+                       window_maximize_restore (tsk->win);
+                       break;
+               case RESTORE:
+                       window_maximize_restore (tsk->win);
+                       break;
+       }
 }
 
 
@@ -382,6 +391,7 @@ void event_property_notify (XEvent *e)
                                init_precision();
                                task_urgent = 0;
                        }
+                       // put active state on all task (multi_desktop)
          if (t) {
                                for (i=0 ; i < nb_panel ; i++) {
                                        for (j=0 ; j < panel1[i].nb_desktop ; j++) {
index f97ed7191bdbb86a36b9472ece9918a8f17329a5..0877d72c30a87f757daee00b67a08a18629819d9 100644 (file)
@@ -28,7 +28,7 @@ FXint fxmalloc(void** ptr,unsigned long size){
 */
 
 // mouse actions
-enum { NONE=0, CLOSE, TOGGLE, ICONIFY, SHADE, TOGGLE_ICONIFY };
+enum { NONE=0, CLOSE, TOGGLE, ICONIFY, SHADE, TOGGLE_ICONIFY, MAXIMIZE_RESTORE, MAXIMIZE, RESTORE };
 
 #define ALLDESKTOP  0xFFFFFFFF
 
index f1c8db16bee487fd5b15d0ee963b3282b0164528..8ba71f607a2cc01f1c575a0b33e9a3c498086a39 100644 (file)
@@ -65,22 +65,13 @@ void window_toggle_shade (Window win)
    send_event32 (win, server.atom._NET_WM_STATE, 2, server.atom._NET_WM_STATE_SHADED, 0);
 }
 
-/*
-int x11_send_expose(Display *dpy, Window dst, int x, int y, int width, int height)
+
+void window_maximize_restore (Window win)
 {
-       XEvent xe;
-       int rc;
-       xe.type = Expose;
-       xe.xexpose.window = dst;
-       xe.xexpose.x = x;
-       xe.xexpose.y = y;
-       xe.xexpose.width = width;
-       xe.xexpose.height = height;
-       xe.xexpose.count = 0;
-       rc = XSendEvent(tray_data.dpy, dst, True, NoEventMask, &xe);
-       return x11_ok() && rc != 0;
+   send_event32 (win, server.atom._NET_WM_STATE, 2, server.atom._NET_WM_STATE_MAXIMIZED_VERT, 0);
+   send_event32 (win, server.atom._NET_WM_STATE, 2, server.atom._NET_WM_STATE_MAXIMIZED_HORZ, 0);
 }
-*/
+
 
 int window_is_hidden (Window win)
 {
index 1c14bca09ac45a1a7f622210f56fcca3fff591e6..a905f6b3fa517c6e8b9ae732424bd53064a10936 100644 (file)
@@ -23,6 +23,7 @@ int window_is_hidden (Window win);
 int window_is_active (Window win);
 int get_icon_count (long *data, int num);
 long *get_best_icon (long *data, int icon_count, int num, int *iw, int *ih, int best_icon_size);
+void window_maximize_restore (Window win);
 void window_toggle_shade (Window win);
 int window_get_desktop (Window win);
 void windows_set_desktop (Window win, int desktop);
This page took 0.036127 seconds and 4 git commands to generate.