]> git.sesse.net Git - vlc/blobdiff - modules/video_output/x11/xcommon.c
*: a new mouse gestures interface, currently supporting back, forward, quit
[vlc] / modules / video_output / x11 / xcommon.c
index a05809d43d8e1655d7c82986816066701d201e8e..e8f51092f6c9beb643a1c47581d6015595047a3d 100644 (file)
@@ -2,7 +2,7 @@
  * xcommon.c: Functions common to the X11 and XVideo plugins
  *****************************************************************************
  * Copyright (C) 1998-2001 VideoLAN
- * $Id: xcommon.c,v 1.10 2003/01/15 13:48:14 sam Exp $
+ * $Id: xcommon.c,v 1.14 2003/02/09 23:42:06 sigmunau Exp $
  *
  * Authors: Vincent Seguin <seguin@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -111,7 +111,8 @@ static void XVideoReleasePort( vout_thread_t *, int );
 #endif
 
 #ifdef MODULE_NAME_IS_x11
-static void SetPalette     ( vout_thread_t *, u16 *, u16 *, u16 * );
+static void SetPalette     ( vout_thread_t *,
+                             uint16_t *, uint16_t *, uint16_t * );
 #endif
 
 /*****************************************************************************
@@ -612,7 +613,10 @@ static int ManageVideo( vout_thread_t *p_vout )
             switch( ((XButtonEvent *)&xevent)->button )
             {
                 case Button1:
-
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int |= 1;
+                    var_Set( p_vout, "mouse-button-down", val );
+                    
                     /* detect double-clicks */
                     if( ( ((XButtonEvent *)&xevent)->time -
                           p_vout->p_sys->i_time_button_last_pressed ) < 300 )
@@ -623,12 +627,29 @@ static int ManageVideo( vout_thread_t *p_vout )
                     p_vout->p_sys->i_time_button_last_pressed =
                         ((XButtonEvent *)&xevent)->time;
                     break;
-
+                case Button2:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int |= 2;
+                    var_Set( p_vout, "mouse-button-down", val );
+                    break;
+                
+                case Button3:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int |= 4;
+                    var_Set( p_vout, "mouse-button-down", val );
+                    break;
+                
                 case Button4:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int |= 8;
+                    var_Set( p_vout, "mouse-button-down", val );
                     input_Seek( p_vout, 15, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
                     break;
 
                 case Button5:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int |= 16;
+                    var_Set( p_vout, "mouse-button-down", val );
                     input_Seek( p_vout, -15, INPUT_SEEK_SECONDS | INPUT_SEEK_CUR );
                     break;
             }
@@ -639,13 +660,26 @@ static int ManageVideo( vout_thread_t *p_vout )
             switch( ((XButtonEvent *)&xevent)->button )
             {
                 case Button1:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int &= ~1;
+                    var_Set( p_vout, "mouse-button-down", val );
+
                     val.b_bool = VLC_TRUE;
                     var_Set( p_vout, "mouse-clicked", val );
                     break;
-
+                    
+                case Button2:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int &= ~2;
+                    var_Set( p_vout, "mouse-button-down", val );
+                    break;
+                    
                 case Button3:
                     {
                         intf_thread_t *p_intf;
+                        var_Get( p_vout, "mouse-button-down", &val );
+                        val.i_int &= ~4;
+                        var_Set( p_vout, "mouse-button-down", val );
                         p_intf = vlc_object_find( p_vout, VLC_OBJECT_INTF,
                                                           FIND_ANYWHERE );
                         if( p_intf )
@@ -655,6 +689,19 @@ static int ManageVideo( vout_thread_t *p_vout )
                         }
                     }
                     break;
+
+                case Button4:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int &= ~8;
+                    var_Set( p_vout, "mouse-button-down", val );
+                    break;
+
+                case Button5:
+                    var_Get( p_vout, "mouse-button-down", &val );
+                    val.i_int &= ~16;
+                    var_Set( p_vout, "mouse-button-down", val );
+                    break;
+                    
             }
         }
         /* Mouse move */
@@ -730,7 +777,7 @@ static int ManageVideo( vout_thread_t *p_vout )
                              ClientMessage, &xevent ) )
     {
         if( (xevent.xclient.message_type == p_vout->p_sys->p_win->wm_protocols)
-               && (xevent.xclient.data.l[0]
+               && ((Atom)xevent.xclient.data.l[0]
                      == p_vout->p_sys->p_win->wm_delete_window ) )
         {
             p_vout->p_vlc->b_die = 1;
@@ -758,10 +805,6 @@ static int ManageVideo( vout_thread_t *p_vout )
 
         p_vout->i_changes &= ~VOUT_SIZE_CHANGE;
 
-        msg_Dbg( p_vout, "video display resized (%dx%d)",
-                         p_vout->p_sys->p_win->i_width,
-                         p_vout->p_sys->p_win->i_height );
-
 #ifdef MODULE_NAME_IS_x11
         /* We need to signal the vout thread about the size change because it
          * is doing the rescaling */
@@ -826,6 +869,7 @@ static int CreateWindow( vout_thread_t *p_vout, x11_window_t *p_win )
     vlc_bool_t              b_configure_notify;
     vlc_bool_t              b_map_notify;
 
+    vlc_value_t             val;
     long long int           i_drawable;
 
     /* Prepare window manager hints and properties */
@@ -844,10 +888,10 @@ static int CreateWindow( vout_thread_t *p_vout, x11_window_t *p_win )
     xwindow_attributes.event_mask = ExposureMask | StructureNotifyMask;
 
     /* Check whether someone provided us with a window ID */
-    i_drawable = p_vout->b_fullscreen ?
-                    -1 : config_GetInt( p_vout, MODULE_STRING "-drawable");
+    var_Get( p_vout->p_vlc, "drawable", &val );
+    i_drawable = p_vout->b_fullscreen ? 0 : val.i_int;
 
-    if( i_drawable == -1 )
+    if( !i_drawable )
     {
         p_win->b_owned = VLC_TRUE;
 
@@ -1428,10 +1472,13 @@ static void EnableXScreenSaver( vout_thread_t *p_vout )
     int dummy;
 #endif
 
-    XSetScreenSaver( p_vout->p_sys->p_display, p_vout->p_sys->i_ss_timeout,
-                     p_vout->p_sys->i_ss_interval,
-                     p_vout->p_sys->i_ss_blanking,
-                     p_vout->p_sys->i_ss_exposure );
+    if( p_vout->p_sys->i_ss_timeout )
+    {
+        XSetScreenSaver( p_vout->p_sys->p_display, p_vout->p_sys->i_ss_timeout,
+                         p_vout->p_sys->i_ss_interval,
+                         p_vout->p_sys->i_ss_blanking,
+                         p_vout->p_sys->i_ss_exposure );
+    }
 
     /* Restore DPMS settings */
 #ifdef DPMSINFO_IN_DPMS_H
@@ -1463,10 +1510,13 @@ static void DisableXScreenSaver( vout_thread_t *p_vout )
                      &p_vout->p_sys->i_ss_exposure );
 
     /* Disable screen saver */
-    XSetScreenSaver( p_vout->p_sys->p_display, 0,
-                     p_vout->p_sys->i_ss_interval,
-                     p_vout->p_sys->i_ss_blanking,
-                     p_vout->p_sys->i_ss_exposure );
+    if( p_vout->p_sys->i_ss_timeout )
+    {
+        XSetScreenSaver( p_vout->p_sys->p_display, 0,
+                         p_vout->p_sys->i_ss_interval,
+                         p_vout->p_sys->i_ss_blanking,
+                         p_vout->p_sys->i_ss_exposure );
+    }
 
     /* Disable DPMS */
 #ifdef DPMSINFO_IN_DPMS_H
@@ -2031,7 +2081,8 @@ static IMAGE_TYPE * CreateImage( vout_thread_t *p_vout,
  * anything, but could later send information on which colors it was unable
  * to set.
  *****************************************************************************/
-static void SetPalette( vout_thread_t *p_vout, u16 *red, u16 *green, u16 *blue )
+static void SetPalette( vout_thread_t *p_vout,
+                        uint16_t *red, uint16_t *green, uint16_t *blue )
 {
     int i;
     XColor p_colors[255];