summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralex <alex@ASUS>2018-09-17 23:42:18 +0200
committeralex <alex@ASUS>2018-09-17 23:42:18 +0200
commit1c391e8494407cf61658af606460ecae1441f55e (patch)
tree13ef5982c26c55713028faf8df94b53a5a2b95af
parent6a4e8192c2859dbc43ac523966db6bc703ba4a78 (diff)
Don't destroy widgets every time
-rw-r--r--modules/game/src/game_iface.c21
-rw-r--r--modules/menu/src/menu_gui.c79
-rw-r--r--modules/player/inc/player_gui.h9
-rw-r--r--modules/player/src/player_gui.c812
-rw-r--r--modules/player/src/player_iface.c9
5 files changed, 353 insertions, 577 deletions
diff --git a/modules/game/src/game_iface.c b/modules/game/src/game_iface.c
index 511c573..9841d7c 100644
--- a/modules/game/src/game_iface.c
+++ b/modules/game/src/game_iface.c
@@ -424,7 +424,6 @@ static void game_iface_update_vis (int r, int c)
int field_vis;
switch (game_iface_out.state) {
- case GAME_IFACE_STATE_SAFE:
case GAME_IFACE_STATE_CHEATED:
case GAME_IFACE_STATE_XYZZY:
case GAME_IFACE_STATE_PLAYING:
@@ -447,6 +446,26 @@ static void game_iface_update_vis (int r, int c)
}
break;
+ case GAME_IFACE_STATE_SAFE:
+ switch (game_board.usr[r][c]) {
+ case GAME_USR_HIDDEN:
+ field_vis = GAME_IFACE_VIS_SAFE_MINE;
+ break;
+
+ case GAME_USR_CLEAR:
+ field_vis = GAME_IFACE_VIS_0 + game_board.gnd[r][c];
+ break;
+
+ case GAME_USR_FLAG:
+ field_vis = GAME_IFACE_VIS_FLAG;
+ break;
+
+ case GAME_USR_POSSIBLE:
+ field_vis = GAME_IFACE_VIS_POSSIBLE;
+ break;
+ }
+ break;
+
case GAME_IFACE_STATE_GAMEOVER:
switch (game_board.usr[r][c]) {
case GAME_USR_KBOOM:
diff --git a/modules/menu/src/menu_gui.c b/modules/menu/src/menu_gui.c
index cec54f5..543b52b 100644
--- a/modules/menu/src/menu_gui.c
+++ b/modules/menu/src/menu_gui.c
@@ -167,17 +167,8 @@ void menu_gui (void)
gtk_box_pack_start(GTK_BOX(box), separator[2], false, false, 5);
gtk_box_pack_start(GTK_BOX(box), button[0].ptr, true, true, 0);
- /* Show */
- gtk_widget_show(label.ptr);
- gtk_widget_show(separator[0]);
- gtk_widget_show(button[1].ptr);
- gtk_widget_show(separator[1]);
- gtk_widget_show(button[2].ptr);
- gtk_widget_show(button[3].ptr);
- gtk_widget_show(separator[2]);
- gtk_widget_show(button[0].ptr);
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
+ /* Refresh */
+ gtk_widget_show_all(window_gui);
/* GTK loop */
sw = 0;
@@ -337,21 +328,8 @@ static void menu_gui_continue (void)
gtk_box_pack_start(GTK_BOX(box), separator[3], false, false, 5);
gtk_box_pack_start(GTK_BOX(box), button[0].ptr, true, true, 0);
- /* Show */
- gtk_widget_show(label.ptr);
- gtk_widget_show(separator[0]);
- gtk_widget_show(button[1].ptr);
- gtk_widget_show(separator[1]);
- gtk_widget_show(button[2].ptr);
- gtk_widget_show(button[3].ptr);
- gtk_widget_show(button[4].ptr);
- gtk_widget_show(button[5].ptr);
- gtk_widget_show(separator[2]);
- gtk_widget_show(button[6].ptr);
- gtk_widget_show(separator[3]);
- gtk_widget_show(button[0].ptr);
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
+ /* Refresh */
+ gtk_widget_show_all(window_gui);
/* GTK loop */
sw = 0;
@@ -445,16 +423,8 @@ static void menu_gui_select (void)
gtk_box_pack_start(GTK_BOX(box), separator[2], false, false, 5);
gtk_box_pack_start(GTK_BOX(box), button[0].ptr, true, true, 0);
- /* Show */
- gtk_widget_show(label.ptr);
- gtk_widget_show(separator[0]);
- gtk_widget_show(button[1].ptr);
- gtk_widget_show(separator[1]);
- gtk_widget_show(button[2].ptr);
- gtk_widget_show(separator[2]);
- gtk_widget_show(button[0].ptr);
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
+ /* Refresh */
+ gtk_widget_show_all(window_gui);
/* GTK loop */
sw = 0;
@@ -542,18 +512,8 @@ static void menu_gui_level (void)
gtk_box_pack_start(GTK_BOX(box), separator[2], false, false, 5);
gtk_box_pack_start(GTK_BOX(box), button[0].ptr, true, true, 0);
- /* Show */
- gtk_widget_show(label.ptr);
- gtk_widget_show(separator[0]);
- gtk_widget_show(button[1].ptr);
- gtk_widget_show(button[2].ptr);
- gtk_widget_show(button[3].ptr);
- gtk_widget_show(separator[1]);
- gtk_widget_show(button[4].ptr);
- gtk_widget_show(separator[2]);
- gtk_widget_show(button[0].ptr);
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
+ /* Refresh */
+ gtk_widget_show_all(window_gui);
/* GTK loop */
sw = 0;
@@ -645,17 +605,8 @@ static void menu_gui_custom (void)
gtk_box_pack_start(GTK_BOX(box), separator[2], false, false, 5);
gtk_box_pack_start(GTK_BOX(box), button[0].ptr, true, true, 0);
- /* Show */
- gtk_widget_show(label.ptr);
- gtk_widget_show(separator[0]);
- gtk_widget_show(button[1].ptr);
- gtk_widget_show(button[2].ptr);
- gtk_widget_show(separator[1]);
- gtk_widget_show(button[3].ptr);
- gtk_widget_show(separator[2]);
- gtk_widget_show(button[0].ptr);
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
+ /* Refresh */
+ gtk_widget_show_all(window_gui);
/* GTK loop */
sw = 0;
@@ -733,14 +684,8 @@ static void menu_gui_devel (void)
gtk_box_pack_start(GTK_BOX(box), separator[1], false, false, 5);
gtk_box_pack_start(GTK_BOX(box), button[0].ptr, true, true, 0);
- /* Show */
- gtk_widget_show(label.ptr);
- gtk_widget_show(separator[0]);
- gtk_widget_show(button[1].ptr);
- gtk_widget_show(separator[1]);
- gtk_widget_show(button[0].ptr);
- gtk_widget_show(box);
- gtk_widget_show(window_gui);
+ /* Refresh */
+ gtk_widget_show_all(window_gui);
/* GTK loop */
sw = 0;
diff --git a/modules/player/inc/player_gui.h b/modules/player/inc/player_gui.h
index 5aa15a6..d98bda6 100644
--- a/modules/player/inc/player_gui.h
+++ b/modules/player/inc/player_gui.h
@@ -52,18 +52,17 @@
/******************************************************************************
******* functions ************************************************************
******************************************************************************/
-void player_gui_init (void);
+void player_gui_init (struct Player_Iface_Position *position,
+ int *action);
int player_gui_start (struct Player_Iface_Position *position,
const char *title,
- const char *subtitle,
- int *action);
+ const char *subtitle);
int player_gui (const struct Game_Iface_Out *board,
struct Player_Iface_Position *position,
const char *title,
- const char *subtitle,
- int *action);
+ const char *subtitle);
void player_gui_save_name (const char *filepath, char *filename);
void player_gui_score_name (char *player_name);
diff --git a/modules/player/src/player_gui.c b/modules/player/src/player_gui.c
index e49e7d2..e6381ea 100644
--- a/modules/player/src/player_gui.c
+++ b/modules/player/src/player_gui.c
@@ -66,6 +66,7 @@ struct Button_Data {
GtkWidget *ptr;
char text [80];
int val;
+ int val2;
int *act;
};
@@ -83,7 +84,11 @@ static struct Button_Data button [BTN_QTTY];
static GtkWidget *box;
static GtkWidget *box_board;
static GtkWidget *box_board_in;
+static GtkWidget *box_board_tit;
+static GtkWidget *box_board_tit_in;
static GtkWidget *box_board_tab;
+static GtkWidget *box_board_stit;
+static GtkWidget *box_board_stit_in;
static GtkWidget *table_board;
static GtkWidget *box_help;
static GtkWidget *box_help_in;
@@ -94,103 +99,97 @@ static int last_help;
******* static functions *****************************************************
******************************************************************************/
/* Start */
+static void board_init (struct Player_Iface_Position *position);
static void show_board_start(struct Player_Iface_Position *position,
const char *title,
- const char *subtitle,
- int *action);
+ const char *subtitle);
-static void board_loop_start(struct Player_Iface_Position *position,
- int *action);
+static void board_loop_start(struct Player_Iface_Position *position);
/* Play */
static void show_board (const struct Game_Iface_Out *board,
struct Player_Iface_Position *position,
const char *title,
- const char *subtitle,
- int *action);
+ const char *subtitle);
static void board_loop (const struct Game_Iface_Out *board,
- struct Player_Iface_Position *position,
- int *action);
+ struct Player_Iface_Position *position);
static char set_char (int game_iface_visible);
static void show_char (struct Field_Data *field);
- /* Input */
-static gboolean callback_field (GtkWidget *widget,
- GdkEventButton *event,
- void *data);
-static void callback_button (GtkWidget *widget,
- void *data);
-#if 0
-static int usr_input (void);
-#endif
/* Help */
-static void show_help (const struct Game_Iface_Out *board,
- int *action);
-static void show_help_start (int *action);
-static void show_help_play (int *action);
-static void show_help_pause (int *action);
-static void show_help_xyzzy (int *action);
-static void show_help_cheat (int *action);
-static void show_help_safe (int *action);
-static void show_help_gameover (int *action);
+static void help_init (int *action);
+static void show_help (const struct Game_Iface_Out *board);
+static void show_help_start (void);
+static void show_help_play (void);
+static void show_help_pause (void);
+static void show_help_xyzzy (void);
+static void show_help_cheat (void);
+static void show_help_safe (void);
+static void show_help_gameover (void);
+ /* Input */
+static gboolean callback_field (GtkWidget *widget,
+ GdkEventButton *event,
+ void *data);
+static gboolean callback_button (GtkWidget *widget,
+ GdkEventButton *event,
+ void *data);
/******************************************************************************
******* main *****************************************************************
******************************************************************************/
-void player_gui_init (void)
+void player_gui_init (struct Player_Iface_Position *position,
+ int *action)
{
- GtkWidget *separator;
-
box = gtk_hbox_new(false, 0);
gtk_container_add(GTK_CONTAINER(window_gui), box);
- /* Text */
- sprintf(button[BTN_CH_OFF].text, "Cheats off");
- sprintf(button[BTN_CH_1].text, "Cheat 1");
- sprintf(button[BTN_CH_2].text, "Cheat 2");
- sprintf(button[BTN_PAUSE].text, "Pause");
- sprintf(button[BTN_SAVE].text, "Save");
- sprintf(button[BTN_QUIT].text, "Quit");
-
- /* Data */
- button[BTN_CH_OFF].val = PLAYER_IFACE_ACT_XYZZY_OFF;
- button[BTN_CH_1].val = PLAYER_IFACE_ACT_XYZZY_LIN;
- button[BTN_CH_2].val = PLAYER_IFACE_ACT_XYZZY_P;
- button[BTN_PAUSE].val = PLAYER_IFACE_ACT_PAUSE;
- button[BTN_SAVE].val = PLAYER_IFACE_ACT_SAVE;
- button[BTN_QUIT].val = PLAYER_IFACE_ACT_QUIT;
-
+ /* Structure */
+ GtkWidget *separator;
box_help = gtk_vbox_new(true, 0);
- box_help_in = gtk_vbox_new(false, 0);
separator = gtk_vseparator_new();
box_board = gtk_vbox_new(false, 0);
- box_board_in = gtk_vbox_new(false, 0);
-
gtk_box_pack_start(GTK_BOX(box), box_help, false, false, 5);
- gtk_box_pack_start(GTK_BOX(box_help), box_help_in, false, false, 5);
gtk_box_pack_start(GTK_BOX(box), separator, false, false, 5);
gtk_box_pack_start(GTK_BOX(box), box_board, true, true, 5);
- gtk_box_pack_start(GTK_BOX(box_board), box_board_in, true, true, 5);
- /* Refresh */
- gtk_widget_show_all(window_gui);
+ help_init(action);
+ board_init(position);
+ /* Board fields */
+ int i;
+ int j;
+ for (i = 0; i < position->rows; i++) {
+ for (j = 0; j < position->cols; j++) {
+ field[i][j].r = i;
+ field[i][j].c = j;
+ field[i][j].row = &(position->row);
+ field[i][j].col = &(position->col);
+ field[i][j].act = action;
+ field[i][j].ptr = gtk_button_new_with_label("NEW");
+ g_signal_connect(field[i][j].ptr, "button-press-event",
+ G_CALLBACK(callback_field), (void *)&field[i][j]);
+ gtk_table_attach_defaults(GTK_TABLE(table_board), field[i][j].ptr,
+ field[i][j].c, field[i][j].c + 1,
+ field[i][j].r, field[i][j].r + 1);
+ }
+ }
-// wtimeout(win_board, REFRESH_TIME_MS);
+ /* Refresh */
+ gtk_widget_show_all(window_gui);
}
int player_gui_start (struct Player_Iface_Position *position,
const char *title,
- const char *subtitle,
- int *action)
+ const char *subtitle)
{
- show_help_start(action);
- show_board_start(position, title, subtitle, action);
+ show_help_start();
+ show_board_start(position, title, subtitle);
/* Refresh */
- gtk_widget_show_all(window_gui);
+ gtk_widget_show(box);
+ gtk_widget_show(window_gui);
gtk_main();
@@ -200,14 +199,14 @@ int player_gui_start (struct Player_Iface_Position *position,
int player_gui (const struct Game_Iface_Out *board,
struct Player_Iface_Position *position,
const char *title,
- const char *subtitle,
- int *action)
+ const char *subtitle)
{
- show_help(board, action);
- show_board(board, position, title, subtitle, action);
+ show_help(board);
+ show_board(board, position, title, subtitle);
/* Refresh */
- gtk_widget_show_all(window_gui);
+ gtk_widget_show(box);
+ gtk_widget_show(window_gui);
gtk_main();
@@ -255,47 +254,81 @@ void player_gui_cleanup (void)
/* * * * * * * * * *
* * * Start * * * * * * *
* * * * * * * * * */
-static void show_board_start(struct Player_Iface_Position *position,
- const char *title,
- const char *subtitle,
- int *action)
+static void board_init (struct Player_Iface_Position *position)
{
GtkWidget *separator[2];
struct Label_Data label[2];
- /* Clear */
- gtk_widget_destroy(box_board_in);
-
/* Box */
box_board_in = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_board), box_board_in, false, false, 5);
+ gtk_box_pack_start(GTK_BOX(box_board), box_board_in, true, true, 5);
/* Title */
- strcpy(label[0].text, title);
- label[0].ptr = gtk_label_new(label[0].text);
- gtk_box_pack_start(GTK_BOX(box_board_in), label[0].ptr, false, false, 0);
+ box_board_tit = gtk_vbox_new(false, 0);
+ box_board_tit_in = gtk_vbox_new(false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_in), box_board_tit, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_tit), box_board_tit_in, false, false, 0);
+ label[0].ptr = gtk_label_new("NEW");
+ gtk_box_pack_start(GTK_BOX(box_board_tit_in), label[0].ptr, false, false, 0);
/* Separator */
separator[0] = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(box_board_in), separator[0], false, false, 5);
/* Board */
+ box_board_tab = gtk_vbox_new(true, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_in), box_board_tab, true, true, 0);
table_board = gtk_table_new(position->rows, position->cols, true);
- gtk_box_pack_start(GTK_BOX(box_board_in), table_board, true, true, 5);
- board_loop_start(position, action);
+ gtk_box_pack_start(GTK_BOX(box_board_tab), table_board, true, true, 5);
/* Separator */
separator[1] = gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(box_board_in), separator[1], false, false, 5);
/* Subtitle */
+ box_board_stit = gtk_vbox_new(false, 0);
+ box_board_stit_in = gtk_vbox_new(false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_in), box_board_stit, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_stit), box_board_stit_in, false, false, 0);
+ label[1].ptr = gtk_label_new("NEW");
+ gtk_box_pack_start(GTK_BOX(box_board_stit_in), label[1].ptr, false, false, 0);
+
+ /* Refresh */
+ gtk_widget_show_all(box_board);
+}
+
+static void show_board_start(struct Player_Iface_Position *position,
+ const char *title,
+ const char *subtitle)
+{
+ struct Label_Data label[2];
+
+ /* Clear */
+ gtk_widget_destroy(box_board_tit_in);
+ gtk_widget_destroy(box_board_stit_in);
+
+ /* Title */
+ box_board_tit_in = gtk_vbox_new(false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_tit), box_board_tit_in, false, false, 0);
+ strcpy(label[0].text, title);
+ label[0].ptr = gtk_label_new(label[0].text);
+ gtk_box_pack_start(GTK_BOX(box_board_tit_in), label[0].ptr, false, false, 0);
+
+ /* Board */
+ board_loop_start(position);
+
+ /* Subtitle */
+ box_board_stit_in = gtk_vbox_new(false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_stit), box_board_stit_in, false, false, 0);
strcpy(label[1].text, subtitle);
label[1].ptr = gtk_label_new(label[1].text);
- gtk_box_pack_start(GTK_BOX(box_board_in), label[1].ptr, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_stit_in), label[1].ptr, false, false, 0);
+
+ /* Refresh */
+ gtk_widget_show_all(box_board);
}
-static void board_loop_start(struct Player_Iface_Position *position,
- int *action)
+static void board_loop_start(struct Player_Iface_Position *position)
{
int i;
int j;
@@ -304,18 +337,8 @@ static void board_loop_start(struct Player_Iface_Position *position,
ch = PLAYER_GUI_CHAR_HIDDEN_FIELD;
for (i = 0; i < position->rows; i++) {
-
- /* hidden */
for (j = 0; j < position->cols; j++) {
- field[i][j].r = i;
- field[i][j].c = j;
- field[i][j].row = &(position->row);
- field[i][j].col = &(position->col);
- field[i][j].act = action;
-
field[i][j].ch = ch;
-
- /* Show char*/
show_char(&field[i][j]);
}
}
@@ -327,60 +350,44 @@ static void board_loop_start(struct Player_Iface_Position *position,
static void show_board (const struct Game_Iface_Out *board,
struct Player_Iface_Position *position,
const char *title,
- const char *subtitle,
- int *action)
+ const char *subtitle)
{
- GtkWidget *separator[2];
struct Label_Data label[2];
/* Clear */
- gtk_widget_destroy(box_board_in);
-
- /* Box */
- box_board_in = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_board), box_board_in, false, false, 5);
+ gtk_widget_destroy(box_board_tit_in);
+ gtk_widget_destroy(box_board_stit_in);
/* Title */
+ box_board_tit_in = gtk_vbox_new(false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_tit), box_board_tit_in, false, false, 0);
strcpy(label[0].text, title);
label[0].ptr = gtk_label_new(label[0].text);
- gtk_box_pack_start(GTK_BOX(box_board_in), label[0].ptr, false, false, 0);
-
- /* Separator */
- separator[0] = gtk_hseparator_new();
- gtk_box_pack_start(GTK_BOX(box_board_in), separator[0], false, false, 5);
+ gtk_box_pack_start(GTK_BOX(box_board_tit_in), label[0].ptr, false, false, 0);
/* Board */
- table_board = gtk_table_new(position->rows, position->cols, true);
- gtk_box_pack_start(GTK_BOX(box_board_in), table_board, true, true, 5);
- board_loop(board, position, action);
-
- /* Separator */
- separator[1] = gtk_hseparator_new();
- gtk_box_pack_start(GTK_BOX(box_board_in), separator[1], false, false, 5);
+ board_loop(board, position);
/* Subtitle */
+ box_board_stit_in = gtk_vbox_new(false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_stit), box_board_stit_in, false, false, 0);
strcpy(label[1].text, subtitle);
label[1].ptr = gtk_label_new(label[1].text);
- gtk_box_pack_start(GTK_BOX(box_board_in), label[1].ptr, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_board_stit_in), label[1].ptr, false, false, 0);
+
+ /* Refresh */
+ gtk_widget_show_all(box_board);
}
static void board_loop (const struct Game_Iface_Out *board,
- struct Player_Iface_Position *position,
- int *action)
+ struct Player_Iface_Position *position)
{
int i;
int j;
for (i = 0; i < board->rows; i++) {
for (j = 0; j < board->cols; j++) {
- field[i][j].r = i;
- field[i][j].c = j;
- field[i][j].row = &(position->row);
- field[i][j].col = &(position->col);
- field[i][j].act = action;
-
field[i][j].ch = set_char(board->visible[i][j]);
-
show_char(&field[i][j]);
}
}
@@ -470,461 +477,268 @@ static void show_char (struct Field_Data *field)
{
char text [2];
sprintf(text, "%c", field->ch);
- field->ptr = gtk_button_new_with_label(text);
- g_signal_connect(field->ptr, "button-press-event",
- G_CALLBACK(callback_field), (void *)field);
- gtk_table_attach_defaults(GTK_TABLE(table_board), field->ptr,
- field->c, field->c + 1, field->r, field->r + 1);
+ gtk_button_set_label(GTK_BUTTON(field->ptr), text);
}
/* * * * * * * * * *
- * * * Input * * * * * * *
+ * * * Help * * * * * * *
* * * * * * * * * */
-static gboolean callback_field (GtkWidget *widget,
- GdkEventButton *event,
- void *data)
+static void help_init (int *action)
{
- struct Field_Data *field_ij;
- field_ij = ((struct Field_Data *)data);
-
- *(field_ij->row) = field_ij->r;
- *(field_ij->col) = field_ij->c;
-
- if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
- //3 is right mouse btn
- *(field_ij->act) = PLAYER_IFACE_ACT_FLAG;
-
- } else if (event->type == GDK_BUTTON_PRESS && event->button == 1) {
- //1 is left mouse btn
- *(field_ij->act) = PLAYER_IFACE_ACT_STEP;
- }
-
- gtk_main_quit();
-
- return false;
-}
-
-static void callback_button (GtkWidget *widget,
- void *data)
-{
- struct Button_Data *button;
- button = ((struct Button_Data *)data);
-
- *(button->act) = button->val;
-
- gtk_main_quit();
-}
-
-#if 0
-static int usr_input (void)
-{
- char ch;
- ch = wgetch(win_board);
-
- int action;
-
- switch (ch) {
- case '+':
- case '\r':
- case '\n':
- action = PLAYER_IFACE_ACT_STEP;
- break;
-
- case ' ':
- action = PLAYER_IFACE_ACT_FLAG;
- break;
-
- case 'f':
- action = PLAYER_IFACE_ACT_FLAG_POSSIBLE;
- break;
-
- /* ASCII 0x08 is BS */
- case KEY_BACKSPACE:
- case 0x08:
- action = PLAYER_IFACE_ACT_RM_FLAG;
- break;
-
-
- case KEY_BREAK:
- case 'p':
- action = PLAYER_IFACE_ACT_PAUSE;
- break;
-
- case 's':
- action = PLAYER_IFACE_ACT_SAVE;
- break;
-
- case 'x':
- /* Wait for special sequence "xyzzy" */
- wtimeout(win_board, 1000);
-
- ch = wgetch(win_board);
- if (ch == 'y') {
- ch = wgetch(win_board);
- if (ch == 'z') {
-
- ch = wgetch(win_board);
- if (ch == 'z') {
-
- ch = wgetch(win_board);
- if (ch == 'y') {
- action = PLAYER_IFACE_ACT_XYZZY_ON;
- }
- }
- }
- }
-
- /* Resume */
- wtimeout(win_board, REFRESH_TIME_MS);
- break;
-
- case '0':
- action = PLAYER_IFACE_ACT_XYZZY_OFF;
- break;
-
- case '1':
- action = PLAYER_IFACE_ACT_XYZZY_LIN;
- break;
-
- case '2':
- action = PLAYER_IFACE_ACT_XYZZY_P;
- break;
-
- case '3':
- action = PLAYER_IFACE_ACT_XYZZY_NP;
- break;
-
- case 'q':
- action = PLAYER_IFACE_ACT_QUIT;
- break;
-
-
- case KEY_LEFT:
- case 'h':
- action = PLAYER_IFACE_ACT_MOVE_LEFT;
- break;
-
- case KEY_DOWN:
- case 'j':
- action = PLAYER_IFACE_ACT_MOVE_DOWN;
- break;
+ /* Box */
+ box_help_in = gtk_vbox_new(false, 0);
+ gtk_box_pack_start(GTK_BOX(box_help), box_help_in, false, false, 5);
- case KEY_UP:
- case 'k':
- action = PLAYER_IFACE_ACT_MOVE_UP;
- break;
+ /* Text */
+ sprintf(button[BTN_CH_OFF].text, "Cheats off");
+ sprintf(button[BTN_CH_1].text, "Cheat 1");
+ sprintf(button[BTN_CH_2].text, "Cheat 2");
+ sprintf(button[BTN_PAUSE].text, "Pause");
+ sprintf(button[BTN_SAVE].text, "Save");
+ sprintf(button[BTN_QUIT].text, "Quit");
- case KEY_RIGHT:
- case 'l':
- action = PLAYER_IFACE_ACT_MOVE_RIGHT;
- break;
+ /* Data */
+ /* L click */
+ button[BTN_CH_OFF].val = PLAYER_IFACE_ACT_XYZZY_OFF;
+ button[BTN_CH_1].val = PLAYER_IFACE_ACT_XYZZY_LIN;
+ button[BTN_CH_2].val = PLAYER_IFACE_ACT_XYZZY_P;
+ button[BTN_PAUSE].val = PLAYER_IFACE_ACT_PAUSE;
+ button[BTN_SAVE].val = PLAYER_IFACE_ACT_SAVE;
+ button[BTN_QUIT].val = PLAYER_IFACE_ACT_QUIT;
+ /* R click */
+ button[BTN_CH_OFF].val2 = PLAYER_IFACE_ACT_FOO;
+ button[BTN_CH_1].val2 = PLAYER_IFACE_ACT_FOO;
+ button[BTN_CH_2].val2 = PLAYER_IFACE_ACT_FOO;
+ button[BTN_PAUSE].val2 = PLAYER_IFACE_ACT_FOO;
+ button[BTN_SAVE].val2 = PLAYER_IFACE_ACT_XYZZY_ON;
+ button[BTN_QUIT].val2 = PLAYER_IFACE_ACT_FOO;
+
+ /* Action */
+ button[BTN_CH_OFF].act = action;
+ button[BTN_CH_1].act = action;
+ button[BTN_CH_2].act = action;
+ button[BTN_PAUSE].act = action;
+ button[BTN_SAVE].act = action;
+ button[BTN_QUIT].act = action;
- case 'c':
- action = PLAYER_IFACE_ACT_HIGHLIGHT;
- break;
+ /* Generate widgets */
+ button[BTN_CH_OFF].ptr = gtk_button_new_with_label(button[BTN_CH_OFF].text);
+ button[BTN_CH_1].ptr = gtk_button_new_with_label(button[BTN_CH_1].text);
+ button[BTN_CH_2].ptr = gtk_button_new_with_label(button[BTN_CH_2].text);
+ button[BTN_PAUSE].ptr = gtk_button_new_with_label(button[BTN_PAUSE].text);
+ button[BTN_SAVE].ptr = gtk_button_new_with_label(button[BTN_SAVE].text);
+ button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
- default:
- action = PLAYER_IFACE_ACT_FOO;
- break;
- }
+ /* Events */
+ g_signal_connect(button[BTN_CH_OFF].ptr, "button-press-event",
+ G_CALLBACK(callback_button), (void *)&button[BTN_CH_OFF]);
+ g_signal_connect(button[BTN_CH_1].ptr, "button-press-event",
+ G_CALLBACK(callback_button), (void *)&button[BTN_CH_1]);
+ g_signal_connect(button[BTN_CH_2].ptr, "button-press-event",
+ G_CALLBACK(callback_button), (void *)&button[BTN_CH_2]);
+ g_signal_connect(button[BTN_PAUSE].ptr, "button-press-event",
+ G_CALLBACK(callback_button), (void *)&button[BTN_PAUSE]);
+ g_signal_connect(button[BTN_SAVE].ptr, "button-press-event",
+ G_CALLBACK(callback_button), (void *)&button[BTN_SAVE]);
+ g_signal_connect(button[BTN_QUIT].ptr, "button-press-event",
+ G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
- return action;
+ /* Box */
+ gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_OFF].ptr, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_1].ptr, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_2].ptr, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_PAUSE].ptr, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_SAVE].ptr, false, false, 0);
+ gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
}
-#endif
-/* * * * * * * * * *
- * * * Help * * * * * * *
- * * * * * * * * * */
-static void show_help (const struct Game_Iface_Out *board,
- int *action)
+static void show_help (const struct Game_Iface_Out *board)
{
if (last_help != board->state) {
- /* Clear */
- gtk_widget_destroy(box_help_in);
-
- /* Box help */
- box_help_in = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_help), box_help_in, false, false, 5);
-
switch (board->state) {
case GAME_IFACE_STATE_PLAYING:
- show_help_play(action);
+ show_help_play();
break;
case GAME_IFACE_STATE_PAUSE:
- show_help_pause(action);
+ show_help_pause();
break;
case GAME_IFACE_STATE_XYZZY:
- show_help_xyzzy(action);
+ show_help_xyzzy();
break;
case GAME_IFACE_STATE_CHEATED:
- show_help_cheat(action);
+ show_help_cheat();
break;
case GAME_IFACE_STATE_SAFE:
- show_help_safe(action);
+ show_help_safe();
break;
case GAME_IFACE_STATE_GAMEOVER:
- show_help_gameover(action);
+ show_help_gameover();
break;
}
/* Update last_help */
last_help = board->state;
+
+ /* Refresh */
+ gtk_widget_show(box_help_in);
+ gtk_widget_show(box_help);
}
}
-static void show_help_start (int *action)
+static void show_help_start (void)
{
- GtkWidget *separator [5];
-
- /* Clear */
- gtk_widget_destroy(box_help_in);
-
- /* Box help */
- box_help_in = gtk_vbox_new(false, 0);
- gtk_box_pack_start(GTK_BOX(box_help), box_help_in, false, false, 5);
-
- /* Data */
- button[BTN_QUIT].act = action;
-
- /* Generate widgets */
- separator[0] = gtk_hseparator_new();
- separator[1] = gtk_hseparator_new();
- separator[2] = gtk_hseparator_new();
- separator[3] = gtk_hseparator_new();
- separator[4] = gtk_hseparator_new();
- button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
-
- /* Events */
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
-
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[0], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[1], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[2], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[3], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[4], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
-
- /* Show */
- gtk_widget_show(separator[0]);
- gtk_widget_show(separator[1]);
- gtk_widget_show(separator[2]);
- gtk_widget_show(separator[3]);
- gtk_widget_show(separator[4]);
+ /* Show & hide */
+ gtk_widget_hide(button[BTN_CH_OFF].ptr);
+ gtk_widget_hide(button[BTN_CH_1].ptr);
+ gtk_widget_hide(button[BTN_CH_2].ptr);
+ gtk_widget_hide(button[BTN_PAUSE].ptr);
+ gtk_widget_hide(button[BTN_SAVE].ptr);
gtk_widget_show(button[BTN_QUIT].ptr);
/* Update last_help */
last_help = GAME_IFACE_STATE_FOO;
+
+ /* Refresh */
+ gtk_widget_show(box_help_in);
+ gtk_widget_show(box_help);
}
-static void show_help_play (int *action)
+static void show_help_play (void)
{
- GtkWidget *separator [3];
-
/* Text */
sprintf(button[BTN_PAUSE].text, "Pause");
-
- /* Data */
- button[BTN_PAUSE].act = action;
- button[BTN_SAVE].act = action;
- button[BTN_QUIT].act = action;
-
- /* Generate widgets */
- separator[0] = gtk_hseparator_new();
- separator[1] = gtk_hseparator_new();
- separator[2] = gtk_hseparator_new();
- button[BTN_PAUSE].ptr = gtk_button_new_with_label(button[BTN_PAUSE].text);
- button[BTN_SAVE].ptr = gtk_button_new_with_label(button[BTN_SAVE].text);
- button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
-
- /* Events */
- g_signal_connect(button[BTN_PAUSE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_PAUSE]);
- g_signal_connect(button[BTN_SAVE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_SAVE]);
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
-
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[0], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[1], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[2], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_PAUSE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_SAVE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
+ gtk_button_set_label(GTK_BUTTON(button[BTN_PAUSE].ptr), button[BTN_PAUSE].text);
+
+ /* Show & hide */
+ gtk_widget_hide(button[BTN_CH_OFF].ptr);
+ gtk_widget_hide(button[BTN_CH_1].ptr);
+ gtk_widget_hide(button[BTN_CH_2].ptr);
+ gtk_widget_show(button[BTN_PAUSE].ptr);
+ gtk_widget_show(button[BTN_SAVE].ptr);
+ gtk_widget_show(button[BTN_QUIT].ptr);
}
-static void show_help_pause (int *action)
+static void show_help_pause (void)
{
- GtkWidget *separator [3];
-
/* Text */
sprintf(button[BTN_PAUSE].text, "Continue");
-
- /* Data */
- button[BTN_PAUSE].act = action;
- button[BTN_SAVE].act = action;
- button[BTN_QUIT].act = action;
-
- /* Generate widgets */
- separator[0] = gtk_hseparator_new();
- separator[1] = gtk_hseparator_new();
- separator[2] = gtk_hseparator_new();
- button[BTN_PAUSE].ptr = gtk_button_new_with_label(button[BTN_PAUSE].text);
- button[BTN_SAVE].ptr = gtk_button_new_with_label(button[BTN_SAVE].text);
- button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
-
- /* Events */
- g_signal_connect(button[BTN_PAUSE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_PAUSE]);
- g_signal_connect(button[BTN_SAVE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_SAVE]);
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
-
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[0], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[1], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[2], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_PAUSE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_SAVE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
+ gtk_button_set_label(GTK_BUTTON(button[BTN_PAUSE].ptr), button[BTN_PAUSE].text);
+
+ /* Show & hide */
+ gtk_widget_hide(button[BTN_CH_OFF].ptr);
+ gtk_widget_hide(button[BTN_CH_1].ptr);
+ gtk_widget_hide(button[BTN_CH_2].ptr);
+ gtk_widget_show(button[BTN_PAUSE].ptr);
+ gtk_widget_show(button[BTN_SAVE].ptr);
+ gtk_widget_show(button[BTN_QUIT].ptr);
}
-static void show_help_xyzzy (int *action)
+static void show_help_xyzzy (void)
{
- GtkWidget *separator;
-
- /* Data */
- button[BTN_CH_OFF].act = action;
- button[BTN_CH_1].act = action;
- button[BTN_CH_2].act = action;
- button[BTN_SAVE].act = action;
- button[BTN_QUIT].act = action;
-
- /* Generate widgets */
- button[BTN_CH_OFF].ptr = gtk_button_new_with_label(button[BTN_CH_OFF].text);
- button[BTN_CH_1].ptr = gtk_button_new_with_label(button[BTN_CH_1].text);
- button[BTN_CH_2].ptr = gtk_button_new_with_label(button[BTN_CH_2].text);
- separator = gtk_hseparator_new();
- button[BTN_SAVE].ptr = gtk_button_new_with_label(button[BTN_SAVE].text);
- button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
-
- /* Events */
- g_signal_connect(button[BTN_CH_OFF].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_CH_OFF]);
- g_signal_connect(button[BTN_CH_1].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_CH_1]);
- g_signal_connect(button[BTN_CH_2].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_CH_2]);
- g_signal_connect(button[BTN_SAVE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_SAVE]);
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
-
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_OFF].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_1].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_CH_2].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator, false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_SAVE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
+ /* Show & hide */
+ gtk_widget_show(button[BTN_CH_OFF].ptr);
+ gtk_widget_show(button[BTN_CH_1].ptr);
+ gtk_widget_show(button[BTN_CH_2].ptr);
+ gtk_widget_hide(button[BTN_PAUSE].ptr);
+ gtk_widget_show(button[BTN_SAVE].ptr);
+ gtk_widget_show(button[BTN_QUIT].ptr);
}
-static void show_help_cheat (int *action)
+static void show_help_cheat (void)
{
- GtkWidget *separator [4];
-
- /* Data */
- button[BTN_SAVE].act = action;
- button[BTN_QUIT].act = action;
-
- /* Generate widgets */
- separator[0] = gtk_hseparator_new();
- separator[1] = gtk_hseparator_new();
- separator[2] = gtk_hseparator_new();
- separator[3] = gtk_hseparator_new();
- button[BTN_SAVE].ptr = gtk_button_new_with_label(button[BTN_SAVE].text);
- button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
+ /* Show & hide */
+ gtk_widget_hide(button[BTN_CH_OFF].ptr);
+ gtk_widget_hide(button[BTN_CH_1].ptr);
+ gtk_widget_hide(button[BTN_CH_2].ptr);
+ gtk_widget_hide(button[BTN_PAUSE].ptr);
+ gtk_widget_show(button[BTN_SAVE].ptr);
+ gtk_widget_show(button[BTN_QUIT].ptr);
+}
- /* Events */
- g_signal_connect(button[BTN_SAVE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_SAVE]);
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
+static void show_help_safe (void)
+{
+ /* Show & hide */
+ gtk_widget_hide(button[BTN_CH_OFF].ptr);
+ gtk_widget_hide(button[BTN_CH_1].ptr);
+ gtk_widget_hide(button[BTN_CH_2].ptr);
+ gtk_widget_hide(button[BTN_PAUSE].ptr);
+ gtk_widget_show(button[BTN_SAVE].ptr);
+ gtk_widget_show(button[BTN_QUIT].ptr);
+}
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[0], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[1], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[2], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[3], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_SAVE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
+static void show_help_gameover (void)
+{
+ /* Show & hide */
+ gtk_widget_hide(button[BTN_CH_OFF].ptr);
+ gtk_widget_hide(button[BTN_CH_1].ptr);
+ gtk_widget_hide(button[BTN_CH_2].ptr);
+ gtk_widget_hide(button[BTN_PAUSE].ptr);
+ gtk_widget_hide(button[BTN_SAVE].ptr);
+ gtk_widget_show(button[BTN_QUIT].ptr);
}
-static void show_help_safe (int *action)
+/* * * * * * * * * *
+ * * * Input * * * * * * *
+ * * * * * * * * * */
+static gboolean callback_field (GtkWidget *widget,
+ GdkEventButton *event,
+ void *data)
{
- GtkWidget *separator [4];
+ struct Field_Data *field_ij;
+ field_ij = ((struct Field_Data *)data);
- /* Data */
- button[BTN_SAVE].act = action;
- button[BTN_QUIT].act = action;
+ *(field_ij->row) = field_ij->r;
+ *(field_ij->col) = field_ij->c;
- /* Generate widgets */
- separator[0] = gtk_hseparator_new();
- separator[1] = gtk_hseparator_new();
- separator[2] = gtk_hseparator_new();
- separator[3] = gtk_hseparator_new();
- button[BTN_SAVE].ptr = gtk_button_new_with_label(button[BTN_SAVE].text);
- button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
+ switch (event->button) {
+ case 1:
+ //1 is left mouse btn
+ if (event->type == GDK_BUTTON_PRESS) {
+ *(field_ij->act) = PLAYER_IFACE_ACT_STEP;
+ }
+ break;
- /* Events */
- g_signal_connect(button[BTN_SAVE].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_SAVE]);
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
+ case 3:
+ //3 is right mouse btn
+ if (event->type == GDK_BUTTON_PRESS) {
+ *(field_ij->act) = PLAYER_IFACE_ACT_FLAG;
+ }
+ break;
+ }
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[0], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[1], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[2], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[3], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_SAVE].ptr, false, false, 0);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
+ gtk_main_quit();
+
+ return false;
}
-static void show_help_gameover (int *action)
+static gboolean callback_button (GtkWidget *widget,
+ GdkEventButton *event,
+ void *data)
{
- GtkWidget *separator [5];
-
- /* Data */
- button[BTN_QUIT].act = action;
+ struct Button_Data *button;
+ button = ((struct Button_Data *)data);
- /* Generate widgets */
- separator[0] = gtk_hseparator_new();
- separator[1] = gtk_hseparator_new();
- separator[2] = gtk_hseparator_new();
- separator[3] = gtk_hseparator_new();
- separator[4] = gtk_hseparator_new();
- button[BTN_QUIT].ptr = gtk_button_new_with_label(button[BTN_QUIT].text);
+ switch (event->button) {
+ case 1:
+ //1 is left mouse btn
+ if (event->type == GDK_BUTTON_PRESS) {
+ *(button->act) = button->val;
+ } else if (event->type == GDK_2BUTTON_PRESS) {
+ }
+ break;
- /* Events */
- g_signal_connect(button[BTN_QUIT].ptr, "clicked",
- G_CALLBACK(callback_button), (void *)&button[BTN_QUIT]);
+ case 3:
+ //3 is right mouse btn
+ *(button->act) = button->val2;
+ break;
+ }
- /* Box */
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[0], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[1], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[2], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[3], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), separator[4], false, false, 25);
- gtk_box_pack_start(GTK_BOX(box_help_in), button[BTN_QUIT].ptr, false, false, 0);
+ gtk_main_quit();
}
diff --git a/modules/player/src/player_iface.c b/modules/player/src/player_iface.c
index 6cdc4ad..cf75da4 100644
--- a/modules/player/src/player_iface.c
+++ b/modules/player/src/player_iface.c
@@ -46,6 +46,7 @@ int player_iface_mode;
* * * Static * * * * * *
* * * * * * * * * */
static struct Player_Iface_Position player_iface_position;
+static int player_action;
/******************************************************************************
@@ -88,7 +89,7 @@ void player_iface_init (int rows, int cols)
break;
case PLAYER_IFACE_GUI:
- player_gui_init();
+ player_gui_init(&player_iface_position, &player_action);
break;
}
}
@@ -108,7 +109,6 @@ int player_iface_start (int *pos_row, int *pos_col)
player_iface_position.highlight = false;
/* Loop until first step */
- int player_action;
do {
switch (player_iface_mode) {
case PLAYER_IFACE_CLUI:
@@ -123,7 +123,7 @@ int player_iface_start (int *pos_row, int *pos_col)
case PLAYER_IFACE_GUI:
player_gui_start(&player_iface_position,
- title, subtitle, &player_action);
+ title, subtitle);
break;
}
@@ -189,7 +189,6 @@ void player_iface (const struct Game_Iface_Out *game_iface_out,
}
/* Request player action */
- int player_action;
switch (player_iface_mode) {
case PLAYER_IFACE_CLUI:
player_clui(game_iface_out, &player_iface_position,
@@ -203,7 +202,7 @@ void player_iface (const struct Game_Iface_Out *game_iface_out,
case PLAYER_IFACE_GUI:
player_gui(game_iface_out, &player_iface_position,
- title, subtitle, &player_action);
+ title, subtitle);
break;
}