#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
static void hd_setup_stackable_window();
-void hd_setup()
+void hdSetup()
{
SDL_VERSION(&WMinfo.version);
if (!SDL_GetWMInfo(&WMinfo)) {
XInternAtoms(display, (char**)hdAtomNames, ATOM_COUNT, True, hdAtomsValues);
if (HDATOM(_HILDON_NON_COMPOSITED_WINDOW) == None) {
- DIE("Hildon Desktop seems not be loaded, since %s is not defined",
+ printf("Hildon Desktop seems not be loaded, since %s is not defined",
"_HILDON_NON_COMPOSITED_WINDOW");
return;
}
- if (hgwLaunched) {
+ if (hgwLaunched || true) {
hd_setup_stackable_window();
}
};
/** Enables or disables the Hildon NonCompositedWindow property */
-void hd_set_non_compositing(bool enable)
+void hdSetNonCompositing(bool enable)
{
Display *display;
- Window xwindow;
- XSetWindowAttributes xattr;
- Atom atom;
+ Window window;
int one = 1;
WMinfo.info.x11.lock_func();
display = WMinfo.info.x11.display;
- xwindow = WMinfo.info.x11.fswindow;
+ window = WMinfo.info.x11.fswindow;
if (enable) {
- /*
- * The basic idea behind this is to disable the override_redirect
- * window attribute, which SDL sets, and instead use _NET_WM_STATE
- * to tell hildon-desktop to fullscreen the app.
- * I am not really happy with this, which should ideally be fixed
- * at the libsdl level, but seems to work.
- * As soon as the window is managed by Hildon-Desktop again, set for it
- * not to be composited.
- */
- XUnmapWindow(display, xwindow);
- xattr.override_redirect = False;
- XChangeWindowAttributes(display, xwindow, CWOverrideRedirect, &xattr);
-
- atom = HDATOM(_NET_WM_STATE_FULLSCREEN);
- XChangeProperty(display, xwindow, HDATOM(_NET_WM_STATE),
- XA_ATOM, 32, PropModeReplace,
- (unsigned char *) &atom, 1);
-
- XChangeProperty(display, xwindow, HDATOM(_HILDON_NON_COMPOSITED_WINDOW),
+ XUnmapWindow(display, window);
+ XChangeProperty(display, window, HDATOM(_HILDON_NON_COMPOSITED_WINDOW),
XA_INTEGER, 32, PropModeReplace,
(unsigned char *) &one, 1);
- XMapWindow(display, xwindow);
+ XMapWindow(display, window);
} else {
- xattr.override_redirect = True;
- XDeleteProperty(display, xwindow,
+ XDeleteProperty(display, window,
HDATOM(_HILDON_NON_COMPOSITED_WINDOW));
- XChangeWindowAttributes(display, xwindow, CWOverrideRedirect, &xattr);
}
WMinfo.info.x11.unlock_func();
{
Display *display;
Window window;
- Atom atom = HDATOM(_NET_WM_WINDOW_TYPE_NORMAL);
+ Atom atom;
XWMHints *hints;
+ XClassHint *chint;
+ XSetWindowAttributes xattr;
int one = 1;
+#if 0
WMinfo.info.x11.lock_func();
display = WMinfo.info.x11.display;
}
hints = XGetWMHints(display, launcher);
- hints->flags &= WindowGroupHint;
+ //hints->input = True;
+ hints->flags = (hints->flags & WindowGroupHint)/* | InputHint*/;
+
+ chint = XAllocClassHint();
+ chint->res_name = chint->res_class = strdup("drnoksnes");
- window = WMinfo.info.x11.wmwindow;
+ window = WMinfo.info.x11.fswindow;
XSetTransientForHint(display, window, launcher);
XSetWMHints(display, window, hints);
+ XSetClassHint(display, window, chint);
+ atom = HDATOM(_NET_WM_WINDOW_TYPE_NORMAL);
XChangeProperty(display, window, HDATOM(_NET_WM_WINDOW_TYPE),
XA_ATOM, 32, PropModeReplace,
(unsigned char *) &atom, 1);
- XChangeProperty(display, window, HDATOM(_HILDON_STACKABLE_WINDOW),
- XA_INTEGER, 32, PropModeReplace,
- (unsigned char *) &one, 1);
-
- window = WMinfo.info.x11.fswindow;
- XSetTransientForHint(display, window, launcher);
- XSetWMHints(display, window, hints);
- XChangeProperty(display, window, HDATOM(_NET_WM_WINDOW_TYPE),
+ xattr.override_redirect = False;
+ XChangeWindowAttributes(display, window, CWOverrideRedirect, &xattr);
+ atom = HDATOM(_NET_WM_STATE_FULLSCREEN);
+ XChangeProperty(display, window, HDATOM(_NET_WM_STATE),
XA_ATOM, 32, PropModeReplace,
(unsigned char *) &atom, 1);
XChangeProperty(display, window, HDATOM(_HILDON_STACKABLE_WINDOW),
XA_INTEGER, 32, PropModeReplace,
(unsigned char *) &one, 1);
+ free(chint->res_name);
+ XFree(chint);
XFree(hints);
WMinfo.info.x11.unlock_func();
+#endif
+}
+
+void hdSetupFullscreen(bool enable)
+{
+ Display *display = WMinfo.info.x11.display;
+ Window window = WMinfo.info.x11.wmwindow;
+
+#if 0
+ WMinfo.info.x11.lock_func();
+
+ /* So we hide the SDL nonfullscreen window when in fullscreen mode. */
+ if (enable) {
+ XUnmapWindow(display, window);
+ } else {
+ XMapWindow(display, window);
+ }
+
+ WMinfo.info.x11.unlock_func();
+#endif
}
#endif