X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fwindowobservers.cpp;h=3bd2334daf1f0f2d8e55bd8078338e7b146b0a70;hb=669fc4c5c25e5f2d916e57c97033dfcb07ea4f0b;hp=989c1196309ef7ea40f9fc65cffc1802dba0e4bf;hpb=b7e36c120eb1546a6c6f97f30e42ab7f9a559c61;p=xonotic%2Fnetradiant.git diff --git a/radiant/windowobservers.cpp b/radiant/windowobservers.cpp index 989c1196..3bd2334d 100644 --- a/radiant/windowobservers.cpp +++ b/radiant/windowobservers.cpp @@ -22,7 +22,7 @@ #include "windowobservers.h" #include -#include +#include #include "generic/bitfield.h" namespace @@ -50,21 +50,21 @@ inline void WindowObservers_OnModifierUp( WindowObservers& observers, ModifierFl #include -gboolean selection_modifier_key_press( GtkWidget* widget, GdkEventKey* event, WindowObservers& observers ){ +gboolean selection_modifier_key_press( ui::Widget widget, GdkEventKey* event, WindowObservers& observers ){ switch ( event->keyval ) { - case GDK_Alt_L: - case GDK_Alt_R: + case GDK_KEY_Alt_L: + case GDK_KEY_Alt_R: //globalOutputStream() << "Alt PRESSED\n"; WindowObservers_OnModifierDown( observers, c_modifierAlt ); break; - case GDK_Shift_L: - case GDK_Shift_R: + case GDK_KEY_Shift_L: + case GDK_KEY_Shift_R: //globalOutputStream() << "Shift PRESSED\n"; WindowObservers_OnModifierDown( observers, c_modifierShift ); break; - case GDK_Control_L: - case GDK_Control_R: + case GDK_KEY_Control_L: + case GDK_KEY_Control_R: //globalOutputStream() << "Control PRESSED\n"; WindowObservers_OnModifierDown( observers, c_modifierControl ); break; @@ -72,21 +72,21 @@ gboolean selection_modifier_key_press( GtkWidget* widget, GdkEventKey* event, Wi return FALSE; } -gboolean selection_modifier_key_release( GtkWidget* widget, GdkEventKey* event, WindowObservers& observers ){ +gboolean selection_modifier_key_release( ui::Widget widget, GdkEventKey* event, WindowObservers& observers ){ switch ( event->keyval ) { - case GDK_Alt_L: - case GDK_Alt_R: + case GDK_KEY_Alt_L: + case GDK_KEY_Alt_R: //globalOutputStream() << "Alt RELEASED\n"; WindowObservers_OnModifierUp( observers, c_modifierAlt ); break; - case GDK_Shift_L: - case GDK_Shift_R: + case GDK_KEY_Shift_L: + case GDK_KEY_Shift_R: //globalOutputStream() << "Shift RELEASED\n"; WindowObservers_OnModifierUp( observers, c_modifierShift ); break; - case GDK_Control_L: - case GDK_Control_R: + case GDK_KEY_Control_L: + case GDK_KEY_Control_R: //globalOutputStream() << "Control RELEASED\n"; WindowObservers_OnModifierUp( observers, c_modifierControl ); break; @@ -109,21 +109,21 @@ void WindowObservers_UpdateModifiers( WindowObservers& observers, ModifierFlags WindowObservers_UpdateModifier( observers, modifiers, c_modifierControl ); } -gboolean modifiers_button_press( GtkWidget* widget, GdkEventButton* event, WindowObservers* observers ){ +gboolean modifiers_button_press( ui::Widget widget, GdkEventButton* event, WindowObservers* observers ){ if ( event->type == GDK_BUTTON_PRESS ) { WindowObservers_UpdateModifiers( *observers, modifiers_for_state( event->state ) ); } return FALSE; } -gboolean modifiers_button_release( GtkWidget* widget, GdkEventButton* event, WindowObservers* observers ){ +gboolean modifiers_button_release( ui::Widget widget, GdkEventButton* event, WindowObservers* observers ){ if ( event->type == GDK_BUTTON_RELEASE ) { WindowObservers_UpdateModifiers( *observers, modifiers_for_state( event->state ) ); } return FALSE; } -gboolean modifiers_motion( GtkWidget *widget, GdkEventMotion *event, WindowObservers* observers ){ +gboolean modifiers_motion( ui::Widget widget, GdkEventMotion *event, WindowObservers* observers ){ WindowObservers_UpdateModifiers( *observers, modifiers_for_state( event->state ) ); return FALSE; } @@ -139,13 +139,28 @@ void GlobalWindowObservers_add( WindowObserver* observer ){ g_window_observers.push_back( observer ); } -void GlobalWindowObservers_connectTopLevel( GtkWindow* window ){ - g_signal_connect( G_OBJECT( window ), "key_press_event", G_CALLBACK( selection_modifier_key_press ), &g_window_observers ); - g_signal_connect( G_OBJECT( window ), "key_release_event", G_CALLBACK( selection_modifier_key_release ), &g_window_observers ); +void GlobalWindowObservers_connectTopLevel( ui::Window window ){ + window.connect( "key_press_event", G_CALLBACK( selection_modifier_key_press ), &g_window_observers ); + window.connect( "key_release_event", G_CALLBACK( selection_modifier_key_release ), &g_window_observers ); } -void GlobalWindowObservers_connectWidget( GtkWidget* widget ){ - g_signal_connect( G_OBJECT( widget ), "button_press_event", G_CALLBACK( modifiers_button_press ), &g_window_observers ); - g_signal_connect( G_OBJECT( widget ), "button_release_event", G_CALLBACK( modifiers_button_release ), &g_window_observers ); - g_signal_connect( G_OBJECT( widget ), "motion_notify_event", G_CALLBACK( modifiers_motion ), &g_window_observers ); +void GlobalWindowObservers_connectWidget( ui::Widget widget ){ + widget.connect( "button_press_event", G_CALLBACK( modifiers_button_press ), &g_window_observers ); + widget.connect( "button_release_event", G_CALLBACK( modifiers_button_release ), &g_window_observers ); + widget.connect( "motion_notify_event", G_CALLBACK( modifiers_motion ), &g_window_observers ); +} + +ModifierFlags modifiers_for_state(unsigned int state) +{ + ModifierFlags modifiers = c_modifierNone; + if ( state & GDK_SHIFT_MASK ) { + modifiers |= c_modifierShift; + } + if ( state & GDK_CONTROL_MASK ) { + modifiers |= c_modifierControl; + } + if ( state & GDK_MOD1_MASK ) { + modifiers |= c_modifierAlt; + } + return modifiers; }