+
+static int keyModifiersToVLC( GdkEventKey *event )
+{
+ int i_keyModifiers = 0;
+ if( event->state & GDK_SHIFT_MASK ) i_keyModifiers |= KEY_MODIFIER_SHIFT;
+ if( event->state & GDK_MOD1_MASK ) i_keyModifiers |= KEY_MODIFIER_ALT;
+ if( event->state & GDK_CONTROL_MASK ) i_keyModifiers |= KEY_MODIFIER_CTRL;
+ if( event->state & GDK_META_MASK ) i_keyModifiers |= KEY_MODIFIER_META;
+ return i_keyModifiers;
+}
+
+static int eventToVLCKey( GdkEventKey *event )
+{
+ int i_vlck = 0;
+
+ switch( event->keyval )
+ {
+ case GDK_Left: i_vlck |= KEY_LEFT; break;
+ case GDK_Right: i_vlck |= KEY_RIGHT; break;
+ case GDK_Up: i_vlck |= KEY_UP; break;
+ case GDK_Down: i_vlck |= KEY_DOWN; break;
+ case GDK_Escape: i_vlck |= KEY_ESC; break;
+ case GDK_Return: i_vlck |= KEY_ENTER; break;
+
+ case GDK_F1: i_vlck |= KEY_F1; break;
+ case GDK_F2: i_vlck |= KEY_F2; break;
+ case GDK_F3: i_vlck |= KEY_F3; break;
+ case GDK_F4: i_vlck |= KEY_F4; break;
+ case GDK_F5: i_vlck |= KEY_F5; break;
+ case GDK_F6: i_vlck |= KEY_F6; break;
+ case GDK_F7: i_vlck |= KEY_F7; break;
+ case GDK_F8: i_vlck |= KEY_F8; break;
+ case GDK_F9: i_vlck |= KEY_F9; break;
+ case GDK_F10: i_vlck |= KEY_F10; break;
+ case GDK_F11: i_vlck |= KEY_F11; break;
+ case GDK_F12: i_vlck |= KEY_F12; break;
+
+ case GDK_Page_Up: i_vlck |= KEY_PAGEUP; break;
+ case GDK_Page_Down: i_vlck |= KEY_PAGEDOWN; break;
+ case GDK_Home: i_vlck |= KEY_HOME; break;
+ case GDK_End: i_vlck |= KEY_END; break;
+ case GDK_Insert: i_vlck |= KEY_INSERT; break;
+ case GDK_Delete: i_vlck |= KEY_DELETE; break;
+
+#ifndef HAVE_MAEMO
+ case GDK_AudioLowerVolume: i_vlck |= KEY_VOLUME_DOWN; break;
+ case GDK_AudioRaiseVolume: i_vlck |= KEY_VOLUME_UP; break;
+ case GDK_AudioMute: i_vlck |= KEY_VOLUME_MUTE; break;
+ case GDK_AudioPlay: i_vlck |= KEY_MEDIA_PLAY_PAUSE; break;
+ case GDK_AudioStop: i_vlck |= KEY_MEDIA_STOP; break;
+ case GDK_AudioNext: i_vlck |= KEY_MEDIA_NEXT_TRACK; break;
+ case GDK_AudioPrev: i_vlck |= KEY_MEDIA_PREV_TRACK; break;
+#endif
+ }
+
+ if( !i_vlck )
+ {
+ /* Force lowercase */
+ if( event->keyval >= GDK_A && event->keyval <= GDK_Z )
+ i_vlck = event->keyval + 32;
+ /* Rest of the ascii range */
+ else if( event->keyval >= GDK_space && event->keyval <= GDK_asciitilde )
+ i_vlck = event->keyval;
+ }
+
+ /* Handle modifiers */
+ i_vlck |= keyModifiersToVLC( event );
+
+ return i_vlck;
+}
+
+gboolean key_cb(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+ intf_thread_t *p_intf = (intf_thread_t *)user_data;
+ widget = widget; /* unused */
+
+ int i_vlck = eventToVLCKey( event );
+ if( i_vlck > 0 )
+ {
+ var_SetInteger( p_intf->p_libvlc, "key-pressed", i_vlck );
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+gboolean fullscreen_cb( gpointer user_data )
+{
+ intf_thread_t *p_intf = (intf_thread_t *)user_data;
+
+ if(p_intf->p_sys->b_fullscreen)
+ {
+ gtk_widget_hide_all( GTK_WIDGET( p_intf->p_sys->p_control_window ) );
+ gtk_window_fullscreen( GTK_WINDOW(p_intf->p_sys->p_main_window) );
+ }
+ else
+ {
+ gtk_window_unfullscreen( GTK_WINDOW(p_intf->p_sys->p_main_window) );
+ gtk_widget_show_all( GTK_WIDGET( p_intf->p_sys->p_control_window ) );
+ }
+ return FALSE;
+}