]> git.sesse.net Git - vlc/blobdiff - modules/video_output/xcb/x11.c
Revert "Helpers to emit asynchronous key press events (refs #3661)"
[vlc] / modules / video_output / xcb / x11.c
index 7fc02da3b003bf86e4f27c08992601eb684754fb..225594bc7c00343e11062385760c6e5482f32767 100644 (file)
@@ -54,6 +54,8 @@ vlc_module_begin ()
     set_subcategory (SUBCAT_VIDEO_VOUT)
     set_capability ("vout display", 75)
     set_callbacks (Open, Close)
+    add_shortcut ("xcb-x11")
+    add_shortcut ("x11")
 
     add_bool ("x11-shm", true, NULL, SHM_TEXT, SHM_LONGTEXT, true)
 vlc_module_end ()
@@ -176,8 +178,13 @@ static int Open (vlc_object_t *obj)
           case 32:
             if (fmt->bits_per_pixel != 32)
                 continue;
+#ifdef FIXED_VLC_RGBA_MASK
             fmt_pic.i_chroma = VLC_CODEC_RGBA;
             break;
+#else
+            msg_Dbg (vd, "X11 visual with alpha-channel not supported");
+            continue;
+#endif
           case 24:
             if (fmt->bits_per_pixel == 32)
                 fmt_pic.i_chroma = VLC_CODEC_RGB32;
@@ -254,7 +261,7 @@ static int Open (vlc_object_t *obj)
 
         c = xcb_create_window_checked (p_sys->conn, p_sys->depth,
                                        p_sys->window,
-                                       p_sys->embed->xid, 0, 0,
+                                       p_sys->embed->handle.xid, 0, 0,
                                        width, height, 0,
                                        XCB_WINDOW_CLASS_INPUT_OUTPUT,
                                        vid, mask, values);
@@ -288,8 +295,11 @@ static int Open (vlc_object_t *obj)
     vd->manage = Manage;
 
     /* */
-    vout_display_SendEventFullscreen (vd, false);
-    vout_display_SendEventDisplaySize (vd, width, height, false);
+    bool is_fullscreen = vd->cfg->is_fullscreen;
+    if (is_fullscreen && vout_window_SetFullScreen (p_sys->embed, true))
+        is_fullscreen = false;
+    vout_display_SendEventFullscreen (vd, is_fullscreen);
+    vout_display_SendEventDisplaySize (vd, width, height, is_fullscreen);
 
     return VLC_SUCCESS;
 
@@ -308,6 +318,12 @@ static void Close (vlc_object_t *obj)
     vout_display_sys_t *p_sys = vd->sys;
 
     ResetPictures (vd);
+
+    /* show the default cursor */
+    xcb_change_window_attributes (p_sys->conn, p_sys->embed->handle.xid, XCB_CW_CURSOR,
+                                  &(uint32_t) { XCB_CURSOR_NONE });
+    xcb_flush (p_sys->conn);
+
     /* colormap, window and context are garbage-collected by X */
     xcb_disconnect (p_sys->conn);
     vout_display_DeleteWindow (vd, p_sys->embed);
@@ -469,8 +485,7 @@ static int Control (vout_display_t *vd, int query, va_list ap)
     case VOUT_DISPLAY_CHANGE_WINDOW_STATE:
     {
         unsigned state = va_arg (ap, unsigned);
-        bool b_on_top = (state & VOUT_WINDOW_STATE_ABOVE) != 0;
-        return vout_window_SetState (p_sys->embed, b_on_top);
+        return vout_window_SetState (p_sys->embed, state);
     }
 
     case VOUT_DISPLAY_CHANGE_ZOOM:
@@ -501,7 +516,7 @@ static int Control (vout_display_t *vd, int query, va_list ap)
     /* Hide the mouse. It will be send when
      * vout_display_t::info.b_hide_mouse is false */
     case VOUT_DISPLAY_HIDE_MOUSE:
-        xcb_change_window_attributes (p_sys->conn, p_sys->embed->xid,
+        xcb_change_window_attributes (p_sys->conn, p_sys->embed->handle.xid,
                                   XCB_CW_CURSOR, &(uint32_t){ p_sys->cursor });
         return VLC_SUCCESS;