[BeFree CVS] panel/src ChangeLog,1.3,1.4 x11panelwindow.cpp,1.1.1.1,1.2 xutils.cpp,1.1.1.1,1.2 xutil
Status: Planning
Brought to you by:
plfiorini
|
From: Pier L. F. <plf...@us...> - 2005-01-07 02:44:04
|
Update of /cvsroot/befree/panel/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1658 Modified Files: ChangeLog x11panelwindow.cpp xutils.cpp xutils.h Log Message: Skip taskbar Index: xutils.cpp =================================================================== RCS file: /cvsroot/befree/panel/src/xutils.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- xutils.cpp 5 Jan 2005 14:07:58 -0000 1.1.1.1 +++ xutils.cpp 7 Jan 2005 02:43:53 -0000 1.2 @@ -142,6 +142,47 @@ return true; } +bool xutils_get_atom_list(Window win, Atom atom, Atom **list, Q_INT32 *len) +{ + Atom type = None; + Atom *retval; + Q_INT32 format, result; + Q_ULONG nitems, bytes_after; + + // Get window property + if ((result = XGetWindowProperty(qt_xdisplay(), win, atom, 0, MAX_PROP_SIZE, + False, XA_ATOM, &type, &format, &nitems, + &bytes_after, (uchar **)&retval)) + != Success) + return false; + + // Type checking + if (type != XA_ATOM) + { + XFree(retval); + return false; + } + + if (!retval) + return false; + + *list = new Atom[nitems]; + + if (!*list) + { + *list = NULL; + XFree(retval); + + return false; + } + + memcpy(*list, retval, sizeof(Atom) * nitems); + *len = nitems; + + XFree(retval); + + return true; +} bool xutils_get_cardinal_atom(Window win, Atom atom, Q_ULONG *val) { Atom type = None; @@ -624,6 +665,27 @@ return retval; } +bool xutils_skip_taskbar(Window win) +{ + Atom cmp = XInternAtom(qt_xdisplay(), "_NET_WM_STATE_SKIP_TASKBAR", False); + Atom atom = XInternAtom(qt_xdisplay(), "_NET_WM_STATE", False); + Atom *result = NULL; + Q_INT32 len, i = 0; + + // Find property + if (!xutils_get_atom_list(win, atom, &result, &len)) + return false; + + // Compare result + while (i < len) + { + if (result[i] == cmp) + return true; + } + + return false; +} + void xutils_set_dock_window(Window win) { Atom net_wm_window_type = XInternAtom(qt_xdisplay(), Index: xutils.h =================================================================== RCS file: /cvsroot/befree/panel/src/xutils.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- xutils.h 5 Jan 2005 10:26:12 -0000 1.1.1.1 +++ xutils.h 7 Jan 2005 02:43:53 -0000 1.2 @@ -35,6 +35,7 @@ class QRect; bool xutils_get_atom(Window win, Atom atom, Atom *val); +bool xutils_get_atom_list(Window win, Atom atom, Atom **list, Q_INT32 *len); bool xutils_get_cardinal_atom(Window win, Atom atom, Q_ULONG *val); bool xutils_get_cardinal_list_atom(Window win, Atom atom, Q_ULONG **list, Q_INT32 *len); @@ -50,6 +51,7 @@ QString xutils_get_name(Window win); QString xutils_get_class(Window win); QPixmap xutils_get_window_icon(Window win); +bool xutils_skip_taskbar(Window win); void xutils_set_dock_window(Window win); void xutils_set_no_group(Window win); Index: x11panelwindow.cpp =================================================================== RCS file: /cvsroot/befree/panel/src/x11panelwindow.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -d -r1.1.1.1 -r1.2 --- x11panelwindow.cpp 5 Jan 2005 14:21:22 -0000 1.1.1.1 +++ x11panelwindow.cpp 7 Jan 2005 02:43:53 -0000 1.2 @@ -75,6 +75,10 @@ Q_INT32 index; Task *task; + // Skip windows with "skip taskbar" + if (xutils_skip_taskbar(win) || xutils_skip_taskbar(leader)) + continue; + // Get window name and icon QString name = xutils_get_name(win); QPixmap icon = xutils_get_window_icon(win); @@ -83,6 +87,7 @@ { // Add this window to its task TaskWindow taskWin(task, name, icon); + taskWin.setId(win); task->addWindow(taskWin); } else Index: ChangeLog =================================================================== RCS file: /cvsroot/befree/panel/src/ChangeLog,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- ChangeLog 7 Jan 2005 02:11:40 -0000 1.3 +++ ChangeLog 7 Jan 2005 02:43:53 -0000 1.4 @@ -1,5 +1,12 @@ 2005-01-07 Pier Luigi Fiorini <pie...@mo...> + * x11panelwindow.cpp (X11PanelWindow::tasksList): + Skip if window has "skip taskbar". + + * xutils.cpp (xutils_get_atom_list): Get atom list. + + * xutils.cpp (xutils_skip_taskbar): Get if "skip taskbar". + * taskwindow.cpp (TaskWindow::close): * taskwindowview.cpp (TaskWindowView::closeTaskWindow): Close task window. |