Actually make the windows key the default meta key
[notion.git] / mod_statusbar / main.c
blobca44296d9d492d50959a8e51fd34d3f659a957f4
1 /*
2 * ion/mod_statusbar/main.c
4 * Copyright (c) Tuomo Valkonen 1999-2009.
6 * See the included file LICENSE for details.
7 */
9 #include <libtu/minmax.h>
10 #include <libextl/readconfig.h>
11 #include <ioncore/saveload.h>
12 #include <ioncore/bindmaps.h>
13 #include <ioncore/global.h>
14 #include <ioncore/ioncore.h>
16 #include "statusbar.h"
17 #include "exports.h"
20 /*{{{ Module information */
23 #include "../version.h"
25 char mod_statusbar_ion_api_version[]=NOTION_API_VERSION;
28 /*}}}*/
31 /*{{{ Bindmaps */
34 WBindmap *mod_statusbar_statusbar_bindmap=NULL;
37 /*}}}*/
40 /*{{{ Systray */
43 static bool is_systray(WClientWin *cwin)
45 static Atom atom__kde_net_wm_system_tray_window_for=None;
46 Atom actual_type=None;
47 int actual_format;
48 unsigned long nitems;
49 unsigned long bytes_after;
50 unsigned char *prop;
51 char *dummy;
52 bool is=FALSE;
54 if(extl_table_gets_s(cwin->proptab, "statusbar", &dummy)){
55 free(dummy);
56 return TRUE;
59 if(atom__kde_net_wm_system_tray_window_for==None){
60 atom__kde_net_wm_system_tray_window_for=XInternAtom(ioncore_g.dpy,
61 "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR",
62 False);
64 if(XGetWindowProperty(ioncore_g.dpy, cwin->win,
65 atom__kde_net_wm_system_tray_window_for, 0,
66 sizeof(Atom), False, AnyPropertyType,
67 &actual_type, &actual_format, &nitems,
68 &bytes_after, &prop)==Success){
69 if(actual_type!=None){
70 is=TRUE;
72 XFree(prop);
75 return is;
79 static bool clientwin_do_manage_hook(WClientWin *cwin, const WManageParams *param)
81 WStatusBar *sb=NULL;
83 if(!is_systray(cwin))
84 return FALSE;
86 sb=mod_statusbar_find_suitable(cwin, param);
87 if(sb==NULL)
88 return FALSE;
90 return region_manage_clientwin((WRegion*)sb, cwin, param,
91 MANAGE_PRIORITY_NONE);
95 /*}}}*/
98 /*{{{ Init & deinit */
101 void mod_statusbar_deinit()
103 hook_remove(clientwin_do_manage_alt,
104 (WHookDummy*)clientwin_do_manage_hook);
106 if(mod_statusbar_statusbar_bindmap!=NULL){
107 ioncore_free_bindmap("WStatusBar", mod_statusbar_statusbar_bindmap);
108 mod_statusbar_statusbar_bindmap=NULL;
111 ioncore_unregister_regclass(&CLASSDESCR(WStatusBar));
113 mod_statusbar_unregister_exports();
117 bool mod_statusbar_init()
119 mod_statusbar_statusbar_bindmap=ioncore_alloc_bindmap("WStatusBar", NULL);
121 if(mod_statusbar_statusbar_bindmap==NULL)
122 return FALSE;
124 if(!ioncore_register_regclass(&CLASSDESCR(WStatusBar),
125 (WRegionLoadCreateFn*) statusbar_load)){
126 mod_statusbar_deinit();
127 return FALSE;
130 if(!mod_statusbar_register_exports()){
131 mod_statusbar_deinit();
132 return FALSE;
135 hook_add(clientwin_do_manage_alt,
136 (WHookDummy*)clientwin_do_manage_hook);
138 /*ioncore_read_config("cfg_statusbar", NULL, TRUE);*/
140 return TRUE;
144 /*}}}*/