Skip to content

Commit 7ddd9fd

Browse files
committed
Simplify code
1 parent 62d106a commit 7ddd9fd

6 files changed

Lines changed: 64 additions & 108 deletions

File tree

four/main.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
#include "terminal.h"
22
#include <gtk/gtk.h>
33

4+
#ifndef GLIB_DEPRECATED_ENUMERATOR_IN_2_74_FOR
5+
static GApplicationFlags app_flags = G_APPLICATION_FLAGS_NONE;
6+
#else
7+
static GApplicationFlags app_flags = G_APPLICATION_DEFAULT_FLAGS;
8+
#endif
9+
410
GtkApplication *app = NULL;
511
GtkWidget *top = NULL;
612

7-
GMenu *barmenu = NULL;
8-
9-
static char *pipe_suffix;
13+
static char *pipe_suffix = NULL;
1014

1115
static void on_app_activate(GApplication *application, gpointer data) {
12-
barmenu = g_menu_new();
13-
gtk_application_set_menubar(GTK_APPLICATION(app), G_MENU_MODEL(barmenu));
14-
g_object_unref(barmenu);
16+
menubar_create();
1517

16-
top = gtk_application_window_new(GTK_APPLICATION(app));
18+
top = gtk_application_window_new(app);
1719
top_signal_connect();
1820

1921
pipe_init(pipe_suffix);
@@ -24,15 +26,11 @@ static void on_app_shutdown(GApplication *application, gpointer data) { pipe_don
2426
int main(int argc, char **argv) {
2527
if (argc != 2) {
2628
printf("suffix parameter missing\n");
27-
return 1;
29+
return EXIT_FAILURE;
2830
}
2931
pipe_suffix = argv[1];
3032

31-
#ifndef GLIB_DEPRECATED_ENUMERATOR_IN_2_74_FOR
32-
app = gtk_application_new(NULL, G_APPLICATION_FLAGS_NONE);
33-
#else
34-
app = gtk_application_new(NULL, G_APPLICATION_DEFAULT_FLAGS);
35-
#endif
33+
app = gtk_application_new(NULL, app_flags);
3634
g_set_application_name("Impress");
3735
g_signal_connect(app, "activate", G_CALLBACK(on_app_activate), NULL);
3836
g_signal_connect(app, "shutdown", G_CALLBACK(on_app_shutdown), NULL);

four/menu.c

Lines changed: 20 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,35 @@
11
#include "terminal.h"
22
#include <gtk/gtk.h>
33

4-
#define APP_MENU_ELEM 1
5-
#define TOP_MENU_ELEM 2
6-
#define SUB_MENU_ELEM 3
7-
8-
typedef struct {
9-
GMenu *menu;
10-
char *label;
11-
} menu_elem;
12-
134
static GHashTable *menu_table = NULL;
145

15-
typedef struct {
16-
GMenuItem *item;
17-
char *label;
18-
char *action;
19-
} menu_item;
6+
void menubar_create() {
7+
menu_table = g_hash_table_new(g_direct_hash, g_direct_equal);
8+
GMenu *menu = g_menu_new();
9+
g_hash_table_insert(menu_table, GINT_TO_POINTER(0), menu);
10+
gtk_application_set_menubar(app, G_MENU_MODEL(menu));
11+
g_object_unref(menu);
12+
}
2013

2114
void menu_node_add(int id, int parent, char *label) {
22-
if (menu_table == NULL) {
23-
menu_table = g_hash_table_new(g_direct_hash, g_direct_equal);
24-
}
25-
menu_elem *m = g_malloc(sizeof(menu_elem));
26-
m->menu = g_menu_new();
27-
m->label = label;
28-
g_hash_table_insert(menu_table, GINT_TO_POINTER(id), m);
29-
if (parent == 0) {
30-
g_menu_append_submenu(barmenu, m->label, G_MENU_MODEL(m->menu));
31-
} else {
32-
menu_elem *p = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
33-
g_menu_append_submenu(p->menu, m->label, G_MENU_MODEL(m->menu));
34-
}
35-
g_object_unref(m->menu);
15+
GMenu *menu = g_menu_new();
16+
g_hash_table_insert(menu_table, GINT_TO_POINTER(id), menu);
17+
GMenu *parent_menu = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
18+
g_menu_append_submenu(parent_menu, label, G_MENU_MODEL(menu));
19+
g_object_unref(menu);
3620
}
3721

38-
void menu_item_click(GSimpleAction *action, GVariant *parameter, gpointer p) {
39-
menu_item *m = (menu_item *)p;
40-
s_menu_action(m->action);
22+
static void menu_item_click(GSimpleAction *self, GVariant *parameter, gpointer data) {
23+
char *action = data;
24+
s_menu_action(action);
4125
}
4226

4327
void menu_item_add(int id, int parent, char *label, char *action) {
44-
menu_item *i = g_malloc(sizeof(menu_item));
45-
i->item = g_menu_item_new(label, action);
46-
i->label = label;
47-
i->action = action;
48-
menu_elem *m = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
49-
g_menu_append_item(G_MENU(m->menu), i->item);
50-
g_object_unref(i->item);
28+
GMenuItem *item = g_menu_item_new(label, action);
29+
GMenu *menu = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
30+
g_menu_append_item(menu, item);
31+
g_object_unref(item);
5132
GSimpleAction *sa = g_simple_action_new(action + 4, NULL);
5233
g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(sa));
53-
g_signal_connect(sa, "activate", G_CALLBACK(menu_item_click), i);
34+
g_signal_connect(sa, "activate", G_CALLBACK(menu_item_click), action);
5435
}

four/terminal.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ extern char *it_api_version;
1010
extern GtkApplication *app;
1111
extern GtkWidget *top;
1212

13-
extern GMenu *barmenu;
14-
1513
// network
1614

1715
void pipe_init(char *pipe_suffix);
@@ -94,6 +92,7 @@ void elem_draw_destroy(gpointer e);
9492

9593
// menu
9694

95+
void menubar_create();
9796
void menu_node_add(int id, int parent, char *label);
9897
void menu_item_add(int id, int parent, char *label, char *action);
9998

main.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
#include "terminal.h"
22
#include <gtk/gtk.h>
33

4+
#ifndef GLIB_DEPRECATED_ENUMERATOR_IN_2_74_FOR
5+
static GApplicationFlags app_flags = G_APPLICATION_FLAGS_NONE;
6+
#else
7+
static GApplicationFlags app_flags = G_APPLICATION_DEFAULT_FLAGS;
8+
#endif
9+
410
GtkApplication *app = NULL;
511
GtkWidget *top = NULL;
612

7-
GMenu *barmenu = NULL;
8-
9-
static char *pipe_suffix;
13+
static char *pipe_suffix = NULL;
1014

1115
static void on_app_activate(GApplication *application, gpointer data) {
12-
barmenu = g_menu_new();
13-
gtk_application_set_menubar(GTK_APPLICATION(app), G_MENU_MODEL(barmenu));
14-
g_object_unref(barmenu);
16+
menubar_create();
1517

16-
top = gtk_application_window_new(GTK_APPLICATION(app));
18+
top = gtk_application_window_new(app);
1719
top_signal_connect();
1820

1921
pipe_init(pipe_suffix);
@@ -24,15 +26,11 @@ static void on_app_shutdown(GApplication *application, gpointer data) { pipe_don
2426
int main(int argc, char **argv) {
2527
if (argc != 2) {
2628
printf("suffix parameter missing\n");
27-
return 1;
29+
return EXIT_FAILURE;
2830
}
2931
pipe_suffix = argv[1];
3032

31-
#ifndef GLIB_DEPRECATED_ENUMERATOR_IN_2_74_FOR
32-
app = gtk_application_new(NULL, G_APPLICATION_FLAGS_NONE);
33-
#else
34-
app = gtk_application_new(NULL, G_APPLICATION_DEFAULT_FLAGS);
35-
#endif
33+
app = gtk_application_new(NULL, app_flags);
3634
g_set_application_name("Impress");
3735
g_signal_connect(app, "activate", G_CALLBACK(on_app_activate), NULL);
3836
g_signal_connect(app, "shutdown", G_CALLBACK(on_app_shutdown), NULL);

menu.c

Lines changed: 20 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,35 @@
11
#include "terminal.h"
22
#include <gtk/gtk.h>
33

4-
#define APP_MENU_ELEM 1
5-
#define TOP_MENU_ELEM 2
6-
#define SUB_MENU_ELEM 3
7-
8-
typedef struct {
9-
GMenu *menu;
10-
char *label;
11-
} menu_elem;
12-
134
static GHashTable *menu_table = NULL;
145

15-
typedef struct {
16-
GMenuItem *item;
17-
char *label;
18-
char *action;
19-
} menu_item;
6+
void menubar_create() {
7+
menu_table = g_hash_table_new(g_direct_hash, g_direct_equal);
8+
GMenu *menu = g_menu_new();
9+
g_hash_table_insert(menu_table, GINT_TO_POINTER(0), menu);
10+
gtk_application_set_menubar(app, G_MENU_MODEL(menu));
11+
g_object_unref(menu);
12+
}
2013

2114
void menu_node_add(int id, int parent, char *label) {
22-
if (menu_table == NULL) {
23-
menu_table = g_hash_table_new(g_direct_hash, g_direct_equal);
24-
}
25-
menu_elem *m = g_malloc(sizeof(menu_elem));
26-
m->menu = g_menu_new();
27-
m->label = label;
28-
g_hash_table_insert(menu_table, GINT_TO_POINTER(id), m);
29-
if (parent == 0) {
30-
g_menu_append_submenu(barmenu, m->label, G_MENU_MODEL(m->menu));
31-
} else {
32-
menu_elem *p = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
33-
g_menu_append_submenu(p->menu, m->label, G_MENU_MODEL(m->menu));
34-
}
35-
g_object_unref(m->menu);
15+
GMenu *menu = g_menu_new();
16+
g_hash_table_insert(menu_table, GINT_TO_POINTER(id), menu);
17+
GMenu *parent_menu = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
18+
g_menu_append_submenu(parent_menu, label, G_MENU_MODEL(menu));
19+
g_object_unref(menu);
3620
}
3721

38-
void menu_item_click(GSimpleAction *action, GVariant *parameter, gpointer p) {
39-
menu_item *m = (menu_item *)p;
40-
s_menu_action(m->action);
22+
static void menu_item_click(GSimpleAction *self, GVariant *parameter, gpointer data) {
23+
char *action = data;
24+
s_menu_action(action);
4125
}
4226

4327
void menu_item_add(int id, int parent, char *label, char *action) {
44-
menu_item *i = g_malloc(sizeof(menu_item));
45-
i->item = g_menu_item_new(label, action);
46-
i->label = label;
47-
i->action = action;
48-
menu_elem *m = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
49-
g_menu_append_item(G_MENU(m->menu), i->item);
50-
g_object_unref(i->item);
28+
GMenuItem *item = g_menu_item_new(label, action);
29+
GMenu *menu = g_hash_table_lookup(menu_table, GINT_TO_POINTER(parent));
30+
g_menu_append_item(menu, item);
31+
g_object_unref(item);
5132
GSimpleAction *sa = g_simple_action_new(action + 4, NULL);
5233
g_action_map_add_action(G_ACTION_MAP(app), G_ACTION(sa));
53-
g_signal_connect(sa, "activate", G_CALLBACK(menu_item_click), i);
34+
g_signal_connect(sa, "activate", G_CALLBACK(menu_item_click), action);
5435
}

terminal.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ extern char *it_api_version;
1010
extern GtkApplication *app;
1111
extern GtkWidget *top;
1212

13-
extern GMenu *barmenu;
14-
1513
// network
1614

1715
void pipe_init(char *pipe_suffix);
@@ -93,6 +91,7 @@ void elem_draw_destroy(gpointer e);
9391

9492
// menu
9593

94+
void menubar_create();
9695
void menu_node_add(int id, int parent, char *label);
9796
void menu_item_add(int id, int parent, char *label, char *action);
9897

0 commit comments

Comments
 (0)