Honor lock flags in e_hints.c

SVN revision: 16406
This commit is contained in:
sebastid 2005-08-29 23:04:21 +00:00 committed by sebastid
parent 86b74f635a
commit 9f01af5e1d
3 changed files with 31 additions and 35 deletions

3
TODO
View File

@ -10,9 +10,6 @@ Some of the things (in very short form) that need to be done to E17...
* BUG: e often forgets what window is focused so ctrl+alt+x for example doesnt * BUG: e often forgets what window is focused so ctrl+alt+x for example doesnt
close the current focused window... hmmmm close the current focused window... hmmmm
* e_hints.c manually changes flags on a border instead of calling
e_border_stick() for example or the calls in e_border.c - add calls as needed
to e_border.c. before calling check the lock flags too.
* BUG: in general fullscreen needs work, cleaning and testing. dont allow * BUG: in general fullscreen needs work, cleaning and testing. dont allow
desktop switches for the desk a fullscreened window is on, nor allow windows desktop switches for the desk a fullscreened window is on, nor allow windows
to be raised above the fs win etc. ie the app must seem to be entirely fs for to be raised above the fs win etc. ie the app must seem to be entirely fs for

View File

@ -3,8 +3,8 @@
*/ */
#include "e.h" #include "e.h"
#define INOUTDEBUG_MOUSE 1 //#define INOUTDEBUG_MOUSE 1
#define INOUTDEBUG_FOCUS 1 //#define INOUTDEBUG_FOCUS 1
/* These are compatible with netwm */ /* These are compatible with netwm */
#define RESIZE_TL 0 #define RESIZE_TL 0
@ -863,7 +863,7 @@ e_border_focus_set(E_Border *bd, int focus, int set)
{ {
E_OBJECT_CHECK(bd); E_OBJECT_CHECK(bd);
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE); E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
printf("e_border_focus_set(%p, %i %i);\n", bd, focus, set); //printf("e_border_focus_set(%p, %i %i);\n", bd, focus, set);
if ((bd->visible) && (bd->changes.visible)) if ((bd->visible) && (bd->changes.visible))
{ {
if ((bd->want_focus) && (set) && (!focus)) if ((bd->want_focus) && (set) && (!focus))
@ -968,12 +968,12 @@ e_border_focus_set(E_Border *bd, int focus, int set)
if (bd->focused) if (bd->focused)
{ {
focused = bd; focused = bd;
printf("set focused to %p\n", focused); //printf("set focused to %p\n", focused);
} }
else if ((!bd->focused) && (focused == bd)) else if ((!bd->focused) && (focused == bd))
{ {
focused = NULL; focused = NULL;
printf("set focused to %p\n", focused); //printf("set focused to %p\n", focused);
} }
} }

View File

@ -515,33 +515,30 @@ e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
e_border_iconify(bd); e_border_iconify(bd);
break; break;
case ECORE_X_WINDOW_STATE_MODAL: case ECORE_X_WINDOW_STATE_MODAL:
changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.modal) if (bd->client.netwm.state.modal)
{ {
bd->client.netwm.state.modal = 0; bd->client.netwm.state.modal = 0;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.modal) if (!bd->client.netwm.state.modal)
{ {
bd->client.netwm.state.modal = 1; bd->client.netwm.state.modal = 1;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.modal = !bd->client.netwm.state.modal; bd->client.netwm.state.modal = !bd->client.netwm.state.modal;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
break; break;
} }
if (changed)
{
bd->client.netwm.update.state = 1;
bd->changed = 1;
}
break; break;
case ECORE_X_WINDOW_STATE_STICKY: case ECORE_X_WINDOW_STATE_STICKY:
if (bd->lock_client_sticky) return; if (bd->lock_client_sticky) return;
@ -563,6 +560,10 @@ e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
break; break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT: case ECORE_X_WINDOW_STATE_MAXIMIZED_VERT:
if (bd->lock_client_maximize) return; if (bd->lock_client_maximize) return;
/* We might end up in a state where maximized_h or maximized_v is
* set. This doesn't matter, because E only checks if both are
* set for maximization.
*/
changed = 0; changed = 0;
switch (action) switch (action)
{ {
@ -599,6 +600,10 @@ e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
break; break;
case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ: case ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ:
if (bd->lock_client_maximize) return; if (bd->lock_client_maximize) return;
/* We might end up in a state where maximized_h or maximized_v is
* set. This doesn't matter, because E only checks if both are
* set for maximization.
*/
changed = 0; changed = 0;
switch (action) switch (action)
{ {
@ -652,62 +657,56 @@ e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
} }
break; break;
case ECORE_X_WINDOW_STATE_SKIP_TASKBAR: case ECORE_X_WINDOW_STATE_SKIP_TASKBAR:
changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.skip_taskbar) if (bd->client.netwm.state.skip_taskbar)
{ {
bd->client.netwm.state.skip_taskbar = 0; bd->client.netwm.state.skip_taskbar = 0;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.skip_taskbar) if (!bd->client.netwm.state.skip_taskbar)
{ {
bd->client.netwm.state.skip_taskbar = 1; bd->client.netwm.state.skip_taskbar = 1;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.skip_taskbar = !bd->client.netwm.state.skip_taskbar; bd->client.netwm.state.skip_taskbar = !bd->client.netwm.state.skip_taskbar;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
break; break;
} }
if (changed)
{
bd->client.netwm.update.state = 1;
bd->changed = 1;
}
break; break;
case ECORE_X_WINDOW_STATE_SKIP_PAGER: case ECORE_X_WINDOW_STATE_SKIP_PAGER:
changed = 0;
switch (action) switch (action)
{ {
case ECORE_X_WINDOW_STATE_ACTION_REMOVE: case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
if (bd->client.netwm.state.skip_pager) if (bd->client.netwm.state.skip_pager)
{ {
bd->client.netwm.state.skip_pager = 0; bd->client.netwm.state.skip_pager = 0;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_ADD: case ECORE_X_WINDOW_STATE_ACTION_ADD:
if (!bd->client.netwm.state.skip_pager) if (!bd->client.netwm.state.skip_pager)
{ {
bd->client.netwm.state.skip_pager = 1; bd->client.netwm.state.skip_pager = 1;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
} }
break; break;
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE: case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
bd->client.netwm.state.skip_pager = !bd->client.netwm.state.skip_pager; bd->client.netwm.state.skip_pager = !bd->client.netwm.state.skip_pager;
changed = 1; bd->client.netwm.update.state = 1;
bd->changed = 1;
break; break;
} }
if (changed)
{
bd->client.netwm.update.state = 1;
bd->changed = 1;
}
break; break;
case ECORE_X_WINDOW_STATE_HIDDEN: case ECORE_X_WINDOW_STATE_HIDDEN:
/* Ignore */ /* Ignore */