From: Thierry Lorthiois Date: Sun, 9 Aug 2009 15:57:18 +0000 (+0000) Subject: add mouse action : maximize_restore, fixed issue 125 X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=a36e39c7c2fedd87847514d561dc7d7bded2a3fa;p=chaz%2Ftint2 add mouse action : maximize_restore, fixed issue 125 --- diff --git a/ChangeLog b/ChangeLog index 9d2f829..4a34333 100644 --- 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 diff --git a/src/config.c b/src/config.c index 0a1d13a..f1b4655 100644 --- a/src/config.c +++ b/src/config.c @@ -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 diff --git a/src/server.c b/src/server.c index 9a448a7..1c7b4cd 100644 --- a/src/server.c +++ b/src/server.c @@ -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); diff --git a/src/server.h b/src/server.h index e85a091..48931ef 100644 --- a/src/server.h +++ b/src/server.h @@ -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; diff --git a/src/tint.c b/src/tint.c index dc90b02..ffd1c5c 100644 --- a/src/tint.c +++ b/src/tint.c @@ -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++) { diff --git a/src/util/common.h b/src/util/common.h index f97ed71..0877d72 100644 --- a/src/util/common.h +++ b/src/util/common.h @@ -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 diff --git a/src/util/window.c b/src/util/window.c index f1c8db1..8ba71f6 100644 --- a/src/util/window.c +++ b/src/util/window.c @@ -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) { diff --git a/src/util/window.h b/src/util/window.h index 1c14bca..a905f6b 100644 --- a/src/util/window.h +++ b/src/util/window.h @@ -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);