691
691
+ GdkDevice *keyboard;
692
692
+ GdkDevice *pointer;
694
+ gboolean left_shift : 1;
695
+ gboolean right_shift : 1;
696
+ gboolean left_control : 1;
697
+ gboolean right_control : 1;
698
+ gboolean left_alt : 1;
699
+ gboolean right_alt : 1;
700
+ gboolean left_super : 1;
701
+ gboolean right_super : 1;
695
704
+G_DEFINE_TYPE (GtkEntryAccel, gtk_entry_accel, GTK_TYPE_ENTRY);
745
+gtk_entry_accel_reset_modifier_states (GtkEntryAccel *entry)
747
+ g_return_if_fail (GTK_IS_ENTRY_ACCEL (entry));
749
+ entry->priv->left_shift = FALSE;
750
+ entry->priv->right_shift = FALSE;
751
+ entry->priv->left_control = FALSE;
752
+ entry->priv->right_control = FALSE;
753
+ entry->priv->left_alt = FALSE;
754
+ entry->priv->right_alt = FALSE;
755
+ entry->priv->left_super = FALSE;
756
+ entry->priv->right_super = FALSE;
760
+gtk_entry_accel_get_modifier_state (GtkEntryAccel *entry,
763
+ g_return_val_if_fail (GTK_IS_ENTRY_ACCEL (entry), FALSE);
767
+ case GDK_KEY_Shift_L:
768
+ return entry->priv->left_shift;
769
+ case GDK_KEY_Shift_R:
770
+ return entry->priv->right_shift;
771
+ case GDK_KEY_Control_L:
772
+ return entry->priv->left_control;
773
+ case GDK_KEY_Control_R:
774
+ return entry->priv->right_control;
775
+ case GDK_KEY_Meta_L:
776
+ case GDK_KEY_Alt_L:
777
+ return entry->priv->left_alt;
778
+ case GDK_KEY_Meta_R:
779
+ case GDK_KEY_Alt_R:
780
+ return entry->priv->right_alt;
781
+ case GDK_KEY_Super_L:
782
+ return entry->priv->left_super;
783
+ case GDK_KEY_Super_R:
784
+ return entry->priv->right_super;
791
+gtk_entry_accel_set_modifier_state (GtkEntryAccel *entry,
795
+ g_return_if_fail (GTK_IS_ENTRY_ACCEL (entry));
799
+ case GDK_KEY_Shift_L:
800
+ entry->priv->left_shift = state;
802
+ case GDK_KEY_Shift_R:
803
+ entry->priv->right_shift = state;
805
+ case GDK_KEY_Control_L:
806
+ entry->priv->left_control = state;
808
+ case GDK_KEY_Control_R:
809
+ entry->priv->right_control = state;
811
+ case GDK_KEY_Meta_L:
812
+ case GDK_KEY_Alt_L:
813
+ entry->priv->left_alt = state;
815
+ case GDK_KEY_Meta_R:
816
+ case GDK_KEY_Alt_R:
817
+ entry->priv->right_alt = state;
819
+ case GDK_KEY_Super_L:
820
+ entry->priv->left_super = state;
822
+ case GDK_KEY_Super_R:
823
+ entry->priv->right_super = state;
736
829
+gtk_entry_accel_update_text (GtkEntryAccel *entry)
738
831
+ if (entry->priv->keyboard == NULL || entry->priv->pointer == NULL)
1008
1102
+ guint mask = event->state & GTK_ENTRY_ACCEL_MODIFIER_MASK;
1009
1103
+ gboolean grabbed = entry->priv->keyboard != NULL && entry->priv->pointer != NULL;
1105
+ gtk_entry_accel_set_modifier_state (entry, key, TRUE);
1011
1107
+ return ((grabbed ? mask : (mask & ~GDK_SHIFT_MASK)) != 0 ||
1012
1108
+ (key != GDK_KEY_Tab &&
1013
1109
+ key != GDK_KEY_KP_Tab &&
1147
+gtk_entry_accel_get_mirrored_key (guint key)
1151
+ case GDK_KEY_Shift_L:
1152
+ return GDK_KEY_Shift_R;
1153
+ case GDK_KEY_Shift_R:
1154
+ return GDK_KEY_Shift_L;
1155
+ case GDK_KEY_Control_L:
1156
+ return GDK_KEY_Control_R;
1157
+ case GDK_KEY_Control_R:
1158
+ return GDK_KEY_Control_L;
1159
+ case GDK_KEY_Meta_L:
1160
+ return GDK_KEY_Meta_R;
1161
+ case GDK_KEY_Meta_R:
1162
+ return GDK_KEY_Meta_L;
1163
+ case GDK_KEY_Alt_L:
1164
+ return GDK_KEY_Alt_R;
1165
+ case GDK_KEY_Alt_R:
1166
+ return GDK_KEY_Alt_L;
1167
+ case GDK_KEY_Super_L:
1168
+ return GDK_KEY_Super_R;
1169
+ case GDK_KEY_Super_R:
1170
+ return GDK_KEY_Super_L;
1171
+ case GDK_KEY_Hyper_L:
1172
+ return GDK_KEY_Hyper_R;
1050
1178
+static gboolean
1051
1179
+gtk_entry_accel_key_release_event (GtkWidget *widget,
1052
1180
+ GdkEventKey *event)
1056
1184
+ guint code = event->hardware_keycode;
1057
1185
+ guint mask = event->state & GTK_ENTRY_ACCEL_MODIFIER_MASK;
1061
+ case GDK_KEY_Meta_L:
1062
+ key = GDK_KEY_Alt_L;
1065
+ case GDK_KEY_Meta_R:
1066
+ key = GDK_KEY_Alt_R;
1070
+ if (event->is_modifier)
1071
+ mask &= ~gtk_entry_accel_get_mask_for_key (key);
1073
1187
+ if (entry->priv->keyboard != NULL && entry->priv->pointer != NULL)
1191
+ case GDK_KEY_Meta_L:
1192
+ key = GDK_KEY_Alt_L;
1195
+ case GDK_KEY_Meta_R:
1196
+ key = GDK_KEY_Alt_R;
1200
+ if (event->is_modifier && !gtk_entry_accel_get_modifier_state (entry, gtk_entry_accel_get_mirrored_key (key)))
1201
+ mask &= ~gtk_entry_accel_get_mask_for_key (key);
1075
1203
+ gtk_entry_accel_ungrab_input (entry, (GdkEvent *) event);
1077
1205
+ switch (gtk_entry_accel_key_pressed (entry, &key, &code, &mask))