bool
GetCardinalList(Glib::RefPtr<const Gdk::Window> window, // IN: Window
const utf::string& atomName, // IN: Atom name
- std::vector<unsigned long>& retValues) // IN: Return values
+ std::vector<unsigned long>& retValues) // IN: Return values
{
ASSERT(window);
ASSERT(window->get_display());
}
+/*
+ *-----------------------------------------------------------------------------
+ *
+ * xutils::CheckDockPanel --
+ *
+ * Utility function to check dock or panel window.
+ *
+ * Results:
+ * true if the dock or panel window found.
+ * Otherwise false.
+ *
+ * Side effects:
+ * None.
+ *
+ *-----------------------------------------------------------------------------
+ */
+bool CheckDockPanel(Glib::RefPtr<const Gdk::Window> window)
+{
+ ASSERT(window);
+ ASSERT(window->get_display());
+
+ GdkDisplay* display = const_cast<GdkDisplay*>(window->get_display()->gobj());
+ GdkWindow* gdkwin = const_cast<GdkWindow*>(window->gobj());
+
+ Atom atom = gdk_x11_get_xatom_by_name_for_display(display, "_NET_WM_WINDOW_TYPE");
+ Atom type;
+ int format;
+ ulong nitems;
+ ulong bytes_after;
+ uint8* values;
+
+ gdk_error_trap_push();
+ int ret = XGetWindowProperty(GDK_DISPLAY_XDISPLAY(display),
+ GDK_WINDOW_XID(gdkwin),
+ atom, 0, G_MAXLONG, False, AnyPropertyType, &type,
+ &format, &nitems, &bytes_after, &values);
+ int err = gdk_error_trap_pop();
+ if (err) {
+ Log("Ignore xerror in XGetWindowProperty. Error code %d", err);
+ return false;
+ }
+ if (ret == Success && type == XA_ATOM
+ && format == 32 && values != NULL && nitems > 0) {
+ unsigned long* stack = (unsigned long*)values;
+ if (stack[0] == XInternAtom(GDK_DISPLAY_XDISPLAY(display),
+ "_NET_WM_WINDOW_TYPE_DOCK", false)) {
+ Log("found dock window: %ld.\n",GDK_WINDOW_XID(gdkwin));
+ XFree(values);
+ return true;
+ }
+ }
+ XFree(values);
+ return false;
+}
+
+
/*
*-----------------------------------------------------------------------------
*