GMutex *x_lock;
GCond *cond_send_message;
gboolean running;
+ gboolean visible;
gchar *display_name;
Display *device;
XSetWindowAttributes win_attr;
XTextProperty text_property;
- XSizeHints size_hints;
XWMHints wm_hints;
unsigned long mask;
const gchar *title = "OpenGL renderer";
priv->x_lock = g_mutex_new ();
priv->cond_send_message = g_cond_new ();
priv->running = TRUE;
+ priv->visible = FALSE;
g_mutex_lock (priv->x_lock);
- x += 20;
- y += 20;
-
priv->device = XOpenDisplay (priv->display_name);
g_debug ("gl device id: %ld\n", (gulong) priv->device);
priv->black = XBlackPixel (priv->device, priv->screen_num);
priv->depth = DefaultDepthOfScreen (priv->screen);
+ g_debug ("gl root id: %lld\n", (guint64) priv->root);
priv->device_width = DisplayWidth (priv->device, priv->screen_num);
priv->device_height = DisplayHeight (priv->device, priv->screen_num);
width, height, 0, priv->visual_info->depth, InputOutput,
priv->visual_info->visual, mask, &win_attr);
+ x += 20;
+ y += 20;
+
XSync (priv->device, FALSE);
XSetWindowBackgroundPixmap (priv->device, priv->internal_win_id, None);
if (!glXIsDirect(priv->device, priv->gl_context))
g_debug ("direct rendering failed\n");
- size_hints.flags = USPosition | USSize;
- size_hints.x = x; //FIXME: not working
- size_hints.y = y; //FIXME: not working
- size_hints.width = width;
- size_hints.height= height;
-
wm_hints.flags = StateHint;
wm_hints.initial_state = NormalState;
wm_hints.input = False;
XStringListToTextProperty ((char**)&title, 1, &text_property);
XSetWMProperties (priv->device, priv->internal_win_id, &text_property, &text_property, 0, 0,
- &size_hints, &wm_hints, NULL);
+ NULL, &wm_hints, NULL);
XFree (text_property.value);
g_mutex_lock (priv->x_lock);
- if (priv->running)
- {
- Display *disp = XOpenDisplay (priv->display_name);
-
- g_debug ("set visible %lld\n", (guint64) priv->internal_win_id);
-
- if (visible)
- XMapWindow (disp, priv->internal_win_id);
- else
- XUnmapWindow (disp, priv->internal_win_id);
-
- XSync(disp, FALSE);
-
- XCloseDisplay (disp);
- }
+ if (priv->visible != visible)
+ priv->visible = visible;
g_mutex_unlock (priv->x_lock);
}
disp = XOpenDisplay (priv->display_name);
+ if (priv->visible)
+ {
+ XMapWindow (disp, priv->internal_win_id);
+ priv->visible = FALSE;
+ }
+
XGetWindowAttributes (disp, priv->internal_win_id, &attr);
event.xexpose.type = Expose;
{
XEvent event;
- g_debug ("Close\n");
+ g_debug ("Close %lld\n", (guint64) priv->internal_win_id);
priv->running = FALSE;
if (priv->draw_cb)
{
priv->draw_cb (priv->draw_data);
+ glFlush();
glXSwapBuffers (priv->device, priv->internal_win_id);
}
break;
g_mutex_lock (priv->x_lock);
+ g_debug ("AA CUSTOM IN: %lld\n", (guint64)priv->internal_win_id);
+
if (priv->running)
{
Display *disp;