all repos — tint2 @ fe2111c8fd8a5bd2fad00a1e037a57a0ba3512fd

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

add mouse action : maximize_restore, fixed issue 125

git-svn-id: http://tint2.googlecode.com/svn/trunk@156 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
lorthiois@bbsoft.fr lorthiois@bbsoft.fr@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

fe2111c8fd8a5bd2fad00a1e037a57a0ba3512fd

parent

027411ca167528cea37e26693c66ae77565b5681

M ChangeLogChangeLog

@@ -1,3 +1,7 @@

+2009-08-09 +- add mouse action : maximize_restore +- fixed issue 125 + 2009-07-28 - some tint2conf code
M src/config.csrc/config.c

@@ -226,6 +226,8 @@ else if (strcmp (event, "shade") == 0)

*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 @@

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
M src/server.csrc/server.c

@@ -54,6 +54,8 @@ server.atom._NET_WM_WINDOW_TYPE_NORMAL = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_NORMAL", False);

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);
M src/server.hsrc/server.h

@@ -37,6 +37,8 @@ Atom _NET_WM_WINDOW_TYPE_NORMAL;

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;
M src/tint.csrc/tint.c

@@ -53,7 +53,7 @@ signal(SIGUSR1, signal_handler);

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 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 @@ if (task_urgent == t) {

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++) {
M src/util/common.hsrc/util/common.h

@@ -28,7 +28,7 @@ }

*/ // 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
M src/util/window.csrc/util/window.c

@@ -65,22 +65,13 @@ {

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) {
M src/util/window.hsrc/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);