31 |
#endif |
#endif |
32 |
|
|
33 |
clientGravitate (c, APPLY); |
clientGravitate (c, APPLY); |
34 |
if (typeDock(c->window) || typeDesktop(c->window) || c->above) |
if (c->non_focusing || c->above) |
35 |
{ |
{ |
36 |
min_x = 0; |
min_x = 0; |
37 |
min_y = 0; |
min_y = 0; |
78 |
printf ("grabbing keys for client (%#lx)\n", c->window); |
printf ("grabbing keys for client (%#lx)\n", c->window); |
79 |
#endif |
#endif |
80 |
|
|
81 |
|
// do not grab the keys for panels. |
82 |
|
if (c->non_focusing) |
83 |
|
{ |
84 |
|
// bind only these keys to "special" windows |
85 |
|
int keynums[] = { |
86 |
|
KEY_CYCLE_WINDOWS, |
87 |
|
KEY_NEXT_WORKSPACE, |
88 |
|
KEY_PREV_WORKSPACE, |
89 |
|
KEY_ADD_WORKSPACE, |
90 |
|
KEY_DEL_WORKSPACE, |
91 |
|
KEY_WORKSPACE_1, |
92 |
|
KEY_WORKSPACE_2, |
93 |
|
KEY_WORKSPACE_3, |
94 |
|
KEY_WORKSPACE_4, |
95 |
|
KEY_WORKSPACE_5, |
96 |
|
KEY_WORKSPACE_6, |
97 |
|
KEY_WORKSPACE_7, |
98 |
|
KEY_WORKSPACE_8, |
99 |
|
KEY_WORKSPACE_9, |
100 |
|
KEY_QUIT |
101 |
|
}; |
102 |
|
for (i = 0; i < 15; i++) |
103 |
|
grabKey (dpy, &keys[keynums[i]], c->window); |
104 |
|
return; |
105 |
|
} |
106 |
|
|
107 |
for (i = 0; i < KEY_COUNT; i++) |
for (i = 0; i < KEY_COUNT; i++) |
108 |
grabKey (dpy, &keys[i], c->window); |
grabKey (dpy, &keys[i], c->window); |
109 |
} |
} |
503 |
|
|
504 |
if (typeDesktop (c->window)) |
if (typeDesktop (c->window)) |
505 |
{ |
{ |
|
c->win_hints = c->win_hints | WIN_HINTS_SKIP_FOCUS; |
|
506 |
c->win_state = c->win_state | WIN_STATE_STICKY; |
c->win_state = c->win_state | WIN_STATE_STICKY; |
507 |
|
c->non_focusing = True; |
508 |
c->has_border = False; |
c->has_border = False; |
509 |
c->win_layer = WIN_LAYER_DESKTOP; |
c->win_layer = WIN_LAYER_DESKTOP; |
510 |
} |
} |
511 |
|
else if (typeDock (c->window)) |
|
if (typeDock (c->window)) |
|
512 |
{ |
{ |
513 |
c->win_hints = c->win_hints | WIN_HINTS_SKIP_FOCUS; |
c->win_state = c->win_state | WIN_STATE_STICKY; |
514 |
|
c->non_focusing = True; |
515 |
c->win_layer = WIN_LAYER_DOCK; |
c->win_layer = WIN_LAYER_DOCK; |
516 |
} |
} |
517 |
|
else |
518 |
|
c->non_focusing = False; |
519 |
|
|
520 |
c->ignore_unmap = attr.map_state == IsViewable ? 1 : 0; |
c->ignore_unmap = attr.map_state == IsViewable ? 1 : 0; |
521 |
c->focus = False; |
c->focus = False; |
601 |
if (getWMState (c->window) != IconicState) |
if (getWMState (c->window) != IconicState) |
602 |
{ |
{ |
603 |
clientShow (c, True); |
clientShow (c, True); |
604 |
if (focus_new && !(c->win_hints & WIN_HINTS_SKIP_FOCUS)) |
if (focus_new && (!(c->win_hints & WIN_HINTS_SKIP_FOCUS) || !c->non_focusing)) |
605 |
{ |
{ |
606 |
clientSetFocus (c, True); |
clientSetFocus (c, True); |
607 |
} |
} |
792 |
if(!c) |
if(!c) |
793 |
return; |
return; |
794 |
|
|
795 |
if (c->win_hints & WIN_HINTS_SKIP_FOCUS) |
if (c->win_hints & WIN_HINTS_SKIP_FOCUS || c->non_focusing) |
796 |
{ |
{ |
797 |
#ifdef DEBUG |
#ifdef DEBUG |
798 |
printf ("NOT raising client (%#lx)\n", c->window); |
printf ("NOT raising client (%#lx)\n", c->window); |
1005 |
clientSetFocus (Client * c, int sort) |
clientSetFocus (Client * c, int sort) |
1006 |
{ |
{ |
1007 |
Client *tmp; |
Client *tmp; |
1008 |
|
int i; |
1009 |
|
|
1010 |
#ifdef DEBUG |
#ifdef DEBUG |
1011 |
printf ("entering clientSetFocus\n"); |
printf ("entering clientSetFocus\n"); |
1020 |
if (c->win_hints & WIN_HINTS_SKIP_FOCUS) |
if (c->win_hints & WIN_HINTS_SKIP_FOCUS) |
1021 |
return; |
return; |
1022 |
|
|
1023 |
|
if (c->non_focusing) |
1024 |
|
{ |
1025 |
|
XSetInputFocus (dpy, c->window, RevertToNone, CurrentTime); |
1026 |
|
return; |
1027 |
|
} |
1028 |
|
|
1029 |
if (sort) |
if (sort) |
1030 |
{ |
{ |
1031 |
if (client_count > 2 && c != clients) |
if (client_count > 2 && c != clients) |
1044 |
|
|
1045 |
XSetInputFocus (dpy, c->window, RevertToNone, CurrentTime); |
XSetInputFocus (dpy, c->window, RevertToNone, CurrentTime); |
1046 |
setFocusHint (c->window); |
setFocusHint (c->window); |
1047 |
|
for (tmp = clients, i = 0; i < client_count; tmp = tmp->next, i++) |
1048 |
|
if (c != tmp && tmp->win_workspace == workspace && tmp->focus) |
1049 |
|
{ |
1050 |
|
tmp->focus = False; |
1051 |
|
frameDraw(tmp); |
1052 |
|
} |
1053 |
|
c->focus = True; |
1054 |
} |
} |
1055 |
else |
else |
1056 |
{ |
{ |
1062 |
Client * |
Client * |
1063 |
clientGetFocus () |
clientGetFocus () |
1064 |
{ |
{ |
1065 |
Window w; |
Client *c; |
1066 |
int dummy; |
// Window w; |
1067 |
|
int i; |
1068 |
|
|
1069 |
#ifdef DEBUG |
#ifdef DEBUG |
1070 |
printf ("entering clientGetFocus\n"); |
printf ("entering clientGetFocus\n"); |
1071 |
#endif |
#endif |
1072 |
|
|
1073 |
XGetInputFocus (dpy, &w, &dummy); |
for (c = clients, i = 0; i < client_count; c = c->next, i++) |
1074 |
return clientGetFromWindow (w, WINDOW); |
if (c->focus && c->win_workspace == workspace) |
1075 |
|
return c; |
1076 |
|
// XGetInputFocus (dpy, &w, &dummy); |
1077 |
|
// return clientGetFromWindow (w, WINDOW); |
1078 |
|
return NULL; |
1079 |
} |
} |
1080 |
|
|
1081 |
void |
void |
1106 |
#endif |
#endif |
1107 |
|
|
1108 |
if ((c->win_state & WIN_STATE_MAXIMIZED) == WIN_STATE_MAXIMIZED |
if ((c->win_state & WIN_STATE_MAXIMIZED) == WIN_STATE_MAXIMIZED |
1109 |
|| typeDesktop (c->window) || typeDock(c->window)) |
|| c->non_focusing) |
1110 |
return; |
return; |
1111 |
|
|
1112 |
g1 = XGrabKeyboard (dpy, c->window, False, GrabModeAsync, GrabModeAsync, |
g1 = XGrabKeyboard (dpy, c->window, False, GrabModeAsync, GrabModeAsync, |
1593 |
if (c2->win_workspace != workspace && |
if (c2->win_workspace != workspace && |
1594 |
!(mask & INCLUDE_ALL_WORKSPACES)) |
!(mask & INCLUDE_ALL_WORKSPACES)) |
1595 |
okay = False; |
okay = False; |
1596 |
|
if (c2->non_focusing) |
1597 |
|
okay = False; |
1598 |
if (okay) |
if (okay) |
1599 |
return c2; |
return c2; |
1600 |
} |
} |
1632 |
return; |
return; |
1633 |
} |
} |
1634 |
|
|
1635 |
|
c->focus = False; |
1636 |
|
|
1637 |
c2 = clientGetNext (c2, INCLUDE_HIDDEN); |
c2 = clientGetNext (c2, INCLUDE_HIDDEN); |
1638 |
if (!c2) |
if (!c2) |
1639 |
cycling = False; |
cycling = False; |
1686 |
clientSetFocus (c2, True); |
clientSetFocus (c2, True); |
1687 |
clientWarpMouse (c2); |
clientWarpMouse (c2); |
1688 |
} |
} |
1689 |
|
else |
1690 |
|
c->focus = True; |
1691 |
} |
} |
1692 |
|
|
1693 |
void |
void |