/[oroborus]/oroborus/src/client.c
ViewVC logotype

Diff of /oroborus/src/client.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.42 by dreamind, Tue Feb 4 23:25:08 2003 UTC revision 1.43 by dreamind, Mon Feb 10 01:53:11 2003 UTC
# Line 31  clientInitPosition (Client * c) Line 31  clientInitPosition (Client * c)
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;
# Line 78  clientGrabKeys (Client * c) Line 78  clientGrabKeys (Client * c)
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  }  }
# Line 477  clientFrame (Window w) Line 503  clientFrame (Window w)
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;
# Line 573  clientFrame (Window w) Line 601  clientFrame (Window w)
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                                  }                                  }
# Line 764  clientRaise (Client * c) Line 792  clientRaise (Client * c)
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);
# Line 977  void Line 1005  void
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");
# Line 991  clientSetFocus (Client * c, int sort) Line 1020  clientSetFocus (Client * c, int sort)
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)
# Line 1009  clientSetFocus (Client * c, int sort) Line 1044  clientSetFocus (Client * c, int sort)
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                  {                  {
# Line 1020  clientSetFocus (Client * c, int sort) Line 1062  clientSetFocus (Client * c, int sort)
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
# Line 1059  clientMove (Client * c, XEvent * e) Line 1106  clientMove (Client * c, XEvent * e)
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,
# Line 1546  clientGetNext (Client * c, int mask) Line 1593  clientGetNext (Client * c, int mask)
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                                  }                                  }
# Line 1583  clientCycle (Client * c) Line 1632  clientCycle (Client * c)
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;
# Line 1635  clientCycle (Client * c) Line 1686  clientCycle (Client * c)
1686                          clientSetFocus (c2, True);                          clientSetFocus (c2, True);
1687                          clientWarpMouse (c2);                          clientWarpMouse (c2);
1688                  }                  }
1689            else
1690                    c->focus = True;
1691  }  }
1692    
1693  void  void

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.43

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26