[atomix/gnome-3-32] Fixed keys in menu controlling game (#17)



commit 72b11613481e41778ed8afe63735d7f26af40bb2
Author: Robert Roth <robert roth bee-tf ro>
Date:   Mon Mar 11 20:50:34 2019 +0200

    Fixed keys in menu controlling game (#17)

 data/ui/interface.ui |  6 ++++--
 src/board-gtk.c      | 16 ++++++++++++++++
 src/main.c           | 16 +---------------
 3 files changed, 21 insertions(+), 17 deletions(-)
---
diff --git a/data/ui/interface.ui b/data/ui/interface.ui
index 124b676..1fe99a4 100644
--- a/data/ui/interface.ui
+++ b/data/ui/interface.ui
@@ -21,7 +21,6 @@
           <object class="GtkMenuButton" id="primary-menu-button">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
             <child>
               <object class="GtkImage" id="primary-menu-image">
                 <property name="visible">True</property>
@@ -53,8 +52,11 @@
                 <property name="shadow_type">none</property>
                 <child>
                   <object class="GtkFixed" id="game_fixed">
+                    <property name="receives_default">True</property>
+                    <property name="can_default">True</property>
+                    <property name="has_default">True</property>
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
+                    <property name="can_focus">True</property>
                     <property name="halign">center</property>
                     <property name="valign">center</property>
                   </object>
diff --git a/src/board-gtk.c b/src/board-gtk.c
index c8c561f..86fb651 100644
--- a/src/board-gtk.c
+++ b/src/board-gtk.c
@@ -81,6 +81,8 @@ static SelectorData *selector_data;   /* data about the selector */
 
 
 /* Forward declarations of internal functions */
+static gboolean on_key_press_event (GObject *widget, GdkEventKey *event,
+                                   gpointer user_data);
 void board_gtk_render (void);
 static void render_tile (Tile *tile, gint row, gint col);
 GtkWidget* create_tile (double x, double y, Tile *tile);
@@ -250,6 +252,7 @@ static gboolean board_handle_arrow_event (GtkWidget *item,
                                           GdkEventButton *event,
                                           gpointer direction)
 {
+  gtk_widget_grab_focus (GTK_WIDGET (board_canvas));
   /* is currently an object moved? */
   if (anim_data->timeout_id != -1)
     return FALSE;
@@ -433,6 +436,10 @@ void board_gtk_init (Theme * theme, gpointer canvas)
   create_logo ();
   gtk_widget_show_all (GTK_WIDGET(board_canvas));
 
+    /* add playfield canvas to left side */
+  g_signal_connect (GTK_WIDGET(board_canvas), "key-press-event",
+                   G_CALLBACK (on_key_press_event), app);
+
   selector_data = selector_create ();
 }
 
@@ -516,6 +523,7 @@ static gboolean board_handle_item_event (GtkWidget *item,
   gboolean just_unselect;
   guint new_row, new_col;
 
+  gtk_widget_grab_focus (GTK_WIDGET (board_canvas));
   /* is currently an object moved? */
   if (anim_data->timeout_id != -1)
     return FALSE;
@@ -851,6 +859,14 @@ gboolean board_gtk_handle_key_event (GObject * canvas, GdkEventKey * event,
   return FALSE;
 }
 
+static gboolean on_key_press_event (GObject *widget, GdkEventKey *event,
+                                   gpointer user_data)
+{
+  if ((app->state == GAME_STATE_RUNNING) || (app->state == GAME_STATE_RUNNING_UNMOVED))
+    return board_gtk_handle_key_event (NULL, event, NULL);
+
+  return FALSE;
+}
 
 static void selector_move_to (SelectorData *data, guint row, guint col)
 {
diff --git a/src/main.c b/src/main.c
index 72a9d8b..e9ac822 100644
--- a/src/main.c
+++ b/src/main.c
@@ -49,8 +49,6 @@ static gboolean set_next_level (void);
 static void setup_level (void);
 static void level_cleanup_view (void);
 static void atomix_exit (void);
-static gboolean on_key_press_event (GObject *widget, GdkEventKey *event,
-                                   gpointer user_data);
 static void game_init (void);
 static void update_statistics (void);
 static void view_congratulations (void);
@@ -232,6 +230,7 @@ static void controller_handle_action (GameAction action)
 
   update_menu_item_state ();
   update_statistics ();
+  gtk_widget_grab_focus (GTK_WIDGET (app->fi_matrix));
 }
 
 static void
@@ -374,15 +373,6 @@ static void atomix_exit (void)
 
 }
 
-static gboolean on_key_press_event (GObject *widget, GdkEventKey *event,
-                                   gpointer user_data)
-{
-  if ((app->state == GAME_STATE_RUNNING) || (app->state == GAME_STATE_RUNNING_UNMOVED))
-    return board_gtk_handle_key_event (NULL, event, NULL);
-
-  return FALSE;
-}
-
 static void game_init (void)
 {
   g_return_if_fail (app != NULL);
@@ -633,10 +623,6 @@ static AtomixApp *create_gui (GApplication *app_instance)
   gtk_grid_attach_next_to (GTK_GRID (stats_grid), app->clock,
                            time_label, GTK_POS_RIGHT, 1, 1);
 
-  /* add playfield canvas to left side */
-  g_signal_connect (G_OBJECT (app->mainwin), "key-press-event",
-                   G_CALLBACK (on_key_press_event), app);
-
   app->lb_level = GTK_WIDGET (gtk_builder_get_object (builder, "level_value"));
   app->lb_name = GTK_WIDGET (gtk_builder_get_object (builder, "molecule_value"));
   app->lb_formula = GTK_WIDGET (gtk_builder_get_object (builder, "formula_value"));


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]