mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Copying wm from old ede
This commit is contained in:
116
edewm/Netwm.cpp
Normal file
116
edewm/Netwm.cpp
Normal file
@ -0,0 +1,116 @@
|
||||
#include "Netwm.h"
|
||||
#include "Frame.h"
|
||||
#include "Winhints.h"
|
||||
#include "Windowmanager.h"
|
||||
#include "debug.h"
|
||||
|
||||
void NETWM::get_strut(Frame *f)
|
||||
{
|
||||
unsigned long size = 0;
|
||||
CARD32 *val=0;
|
||||
|
||||
val = (CARD32 *)getProperty(f->window(), _XA_NET_WM_STRUT, XA_CARDINAL, &size);
|
||||
if(!val) return;
|
||||
|
||||
if ((size / (sizeof(CARD32))) != 4) {
|
||||
DBG("Window 0x%lx has wrong STRUT value (%d)\n", f->window(), size / (sizeof(CARD32)));
|
||||
XFree((char*)val);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!f->strut_) f->strut_ = new Fl_Rect();
|
||||
|
||||
int l=val[0];
|
||||
int r=val[1];
|
||||
int t=val[2];
|
||||
int b=val[3];
|
||||
f->strut_->set(l, t, l+r, t+b);
|
||||
|
||||
XFree((char*)val);
|
||||
}
|
||||
|
||||
bool NETWM::get_window_type(Frame *f)
|
||||
{
|
||||
unsigned long size = 0;
|
||||
Atom *val=0;
|
||||
int ret=0;
|
||||
int wintype = TYPE_NORMAL;
|
||||
|
||||
val = (Atom *)getProperty(f->window(), _XA_NET_WM_WINDOW_TYPE, XA_ATOM, &size, &ret);
|
||||
if(!val || ret!=Success) {
|
||||
f->window_type(TYPE_NORMAL);
|
||||
return false;
|
||||
}
|
||||
|
||||
for(uint i = 0; i < (size / (sizeof(Atom))); i++)
|
||||
{
|
||||
if (val[i] == _XA_NET_WM_WINDOW_TYPE_DOCK)
|
||||
{
|
||||
DBG("_XA_NET_WM_WINDOW_TYPE_DOCK\n");
|
||||
wintype = TYPE_DOCK;
|
||||
break;
|
||||
}
|
||||
else if (val[i] == _XA_NET_WM_WINDOW_TYPE_TOOLBAR)
|
||||
{
|
||||
DBG("_XA_NET_WM_WINDOW_TYPE_TOOLBAR\n");
|
||||
wintype = TYPE_TOOLBAR;
|
||||
break;
|
||||
}
|
||||
else if (val[i] == _XA_NET_WM_WINDOW_TYPE_MENU)
|
||||
{
|
||||
DBG("_XA_NET_WM_WINDOW_TYPE_MENU\n");
|
||||
wintype = TYPE_MENU;
|
||||
break;
|
||||
}
|
||||
else if (val[i] == _XA_NET_WM_WINDOW_TYPE_UTIL)
|
||||
{
|
||||
DBG("_XA_NET_WM_WINDOW_TYPE_UTIL\n");
|
||||
wintype = TYPE_UTIL;
|
||||
break;
|
||||
}
|
||||
else if (val[i] == _XA_NET_WM_WINDOW_TYPE_DIALOG)
|
||||
{
|
||||
DBG("_XA_NET_WM_WINDOW_TYPE_DIALOG\n");
|
||||
wintype = TYPE_DIALOG;
|
||||
break;
|
||||
}
|
||||
else if (val[i] == _XA_NET_WM_WINDOW_TYPE_NORMAL)
|
||||
{
|
||||
DBG("_XA_NET_WM_WINDOW_TYPE_NORMAL\n");
|
||||
wintype = TYPE_NORMAL;
|
||||
break;
|
||||
}
|
||||
else if (val[i] == _XA_NET_WM_WINDOW_TYPE_DESKTOP)
|
||||
{
|
||||
DBG("_XA_NET_WM_WINDOW_TYPE_DESKTOP\n");
|
||||
wintype = TYPE_DESKTOP;
|
||||
break;
|
||||
} else {
|
||||
DBG("Unknown NETWM window type 0x%08lx\n", val[i]);
|
||||
}
|
||||
|
||||
} /* for */
|
||||
|
||||
XFree((char*)val);
|
||||
|
||||
f->window_type(wintype);
|
||||
return true;
|
||||
}
|
||||
|
||||
void NETWM::set_active_window(Window win)
|
||||
{
|
||||
//Set NET-WM active window
|
||||
XChangeProperty(fl_display, root_win, _XA_NET_ACTIVE_WINDOW, XA_WINDOW, 32,
|
||||
PropModeReplace, (unsigned char *)&win, 1);
|
||||
}
|
||||
|
||||
char *NETWM::get_title(Frame *f)
|
||||
{
|
||||
int ret=0;
|
||||
char *title = (char*)getProperty(f->window(), _XA_NET_WM_NAME, _XA_UTF8_STRING, 0, &ret);
|
||||
if(!title || ret!=Success) {
|
||||
return 0;
|
||||
}
|
||||
return title;
|
||||
}
|
||||
|
Reference in New Issue
Block a user