]> git.sesse.net Git - vlc/blobdiff - modules/control/hotkeys.c
Patch by Johannes Buchner (buchner.johannes at gmx do at): Hotkeys for zoom.
[vlc] / modules / control / hotkeys.c
index 970d215de13d222eba56241406d767d9c9d14c94..23242a4228581c836a32366f24c44d3e567f062a 100644 (file)
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <stdlib.h>                                      /* malloc(), free() */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
 #include <vlc/vlc.h>
 #include <vlc_interface.h>
@@ -155,7 +158,7 @@ static void Run( intf_thread_t *p_intf )
         var_Set( p_intf->p_libvlc, p_hotkeys[i].psz_action, val );
     }
 
-    while( !intf_ShouldDie( p_intf ) )
+    for( vlc_bool_t b_quit = VLC_FALSE ; !b_quit; )
     {
         int i_key, i_action;
         int i_times = 0;
@@ -205,11 +208,8 @@ static void Run( intf_thread_t *p_intf )
 
         if( !i_action )
         {
-            vlc_mutex_lock( &p_intf->object_lock );
-            vlc_cond_wait( &p_intf->object_wait, &p_intf->object_lock );
-            vlc_mutex_unlock( &p_intf->object_lock );
+            b_quit = vlc_object_lock_and_wait( p_intf );
             /* No key pressed, sleep a bit more */
-//            msleep( INTF_IDLE_SLEEP );
             continue;
         }
 
@@ -236,7 +236,10 @@ static void Run( intf_thread_t *p_intf )
 
         if( i_action == ACTIONID_QUIT )
         {
+            if( p_playlist )
+                playlist_Stop( p_playlist );
             vlc_object_kill( p_intf->p_libvlc );
+            vlc_object_kill( p_intf );
             ClearChannels( p_intf, p_vout );
             vout_OSDMessage( p_intf, DEFAULT_CHAN, _( "Quit" ) );
             if( p_vout )
@@ -349,6 +352,24 @@ static void Run( intf_thread_t *p_intf )
             val.b_bool = !val.b_bool;
             var_Set( p_playlist, "random", val );
         }
+        else if( i_action == ACTIONID_ZOOM_QUARTER || 
+                 i_action == ACTIONID_ZOOM_HALF ||
+                 i_action == ACTIONID_ZOOM_ORIGINAL || 
+                 i_action == ACTIONID_ZOOM_DOUBLE )
+        {
+            if( p_vout )
+            {
+                if( i_action == ACTIONID_ZOOM_QUARTER )
+                    val.f_float = 0.25;
+                if( i_action == ACTIONID_ZOOM_HALF )
+                    val.f_float = 0.5;
+                if( i_action == ACTIONID_ZOOM_ORIGINAL )
+                    val.f_float = 1;
+                if( i_action == ACTIONID_ZOOM_DOUBLE )
+                    val.f_float = 2;
+                var_Set( p_vout, "zoom", val );
+            }
+        }
         else if( i_action == ACTIONID_PLAY_PAUSE )
         {
             val.i_int = PLAYING_S;
@@ -825,6 +846,7 @@ static int GetKey( intf_thread_t *p_intf)
 static int KeyEvent( vlc_object_t *p_this, char const *psz_var,
                      vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
+    VLC_UNUSED(psz_var); VLC_UNUSED(oldval);
     intf_thread_t *p_intf = (intf_thread_t *)p_data;
     if ( !newval.i_int )
     {
@@ -854,6 +876,7 @@ static int KeyEvent( vlc_object_t *p_this, char const *psz_var,
 static int ActionKeyCB( vlc_object_t *p_this, char const *psz_var,
                         vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
+    VLC_UNUSED(oldval); VLC_UNUSED(p_data);
     libvlc_int_t *p_libvlc = (libvlc_int_t *)p_this;
     struct hotkey *p_hotkeys = p_libvlc->p_hotkeys;
     mtime_t i_date;
@@ -891,12 +914,16 @@ static void PlayBookmark( intf_thread_t *p_intf, int i_num )
     char *psz_bookmark = strdup( val.psz_string );
     PL_LOCK;
     FOREACH_ARRAY( playlist_item_t *p_item, p_playlist->items )
-        if( !strcmp( psz_bookmark, p_item->p_input->psz_uri ) )
+        char *psz_uri = input_item_GetURI( p_item->p_input );
+        if( !strcmp( psz_bookmark, psz_uri ) )
         {
+            free( psz_uri );
             playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, VLC_TRUE,
                               NULL, p_item );
             break;
         }
+        else
+            free( psz_uri );
     FOREACH_END();
     PL_UNLOCK;
     vlc_object_release( p_playlist );
@@ -911,10 +938,10 @@ static void SetBookmark( intf_thread_t *p_intf, int i_num )
                 VLC_VAR_STRING|VLC_VAR_DOINHERIT );
     if( p_playlist->status.p_item )
     {
-        config_PutPsz( p_intf, psz_bookmark_name,
-                       p_playlist->status.p_item->p_input->psz_uri);
-        msg_Info( p_intf, "setting playlist bookmark %i to %s", i_num,
-                  p_playlist->status.p_item->p_input->psz_uri);
+        char *psz_uri = input_item_GetURI( p_playlist->status.p_item->p_input );
+        config_PutPsz( p_intf, psz_bookmark_name, psz_uri);
+        msg_Info( p_intf, "setting playlist bookmark %i to %s", i_num, psz_uri);
+        free( psz_uri );
         config_SaveConfigFile( p_intf, "hotkeys" );
     }
     pl_Release( p_intf );