add mouse action : maximize_restore, fixed issue 125

git-svn-id: http://tint2.googlecode.com/svn/trunk@156 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
lorthiois@bbsoft.fr 2009-08-09 15:57:18 +00:00
parent 027411ca16
commit fe2111c8fd
8 changed files with 50 additions and 36 deletions

View file

@ -1,3 +1,7 @@
2009-08-09
- add mouse action : maximize_restore
- fixed issue 125
2009-07-28
- some tint2conf code

View 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

View 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);

View 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;

View 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++) {

View 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

View 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)
{

View 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);