我在devhelp程序中使用它的文档。所以,让我们开始吧。
首先要做的是创建一个在dbus总线上可见的应用程序。
GtkApplication *app;
static void app_activate_cb ( GtkApplication *app, gpointer user_data ) {
}
int main ( int argc, char **argv ) {
app = gtk_application_new ( "com.xverizex.configurator", G_APPLICATION_FLAGS_NONE );
g_application_register ( ( GApplication * ) app, NULL, NULL );
g_signal_connect ( app, "activate", G_CALLBACK ( app_activate_cb ), NULL );
return g_application_run ( ( GApplication * ) app, argc, argv );
}
激活应用程序后,您需要用小部件填充它。我在此文件中创建一个结构,该结构将存储所有小部件,如果您指定其他配色方案,这些小部件的外观将发生变化。
结构如下:
struct widgets {
GtkWidget *main_window;
GtkWidget *notebook;
GtkWidget *tree_view_sources;
GtkWidget *label_tab_sources;
GtkWidget *header_bar;
GtkWidget *search_entry;
GtkWidget *button_add_item;
GtkWidget *tree_view_reactions;
GtkWidget *label_tab_reactions;
GtkWidget *window_add_source;
...
GtkWidget *STUBS;
最后,我创建一个名为STUBS的特殊变量,该变量不会分配任何内容。应用程序中有许多小部件,您需要某种方式为所需的小部件分配所需的名称。这就是我的方法。
static void set_theme_name ( const char *name ) {
struct widgets **p = ( struct widgets ** ) &w;
for ( int i = 0; p[i] != NULL; i++ ) {
gtk_widget_set_name ( ( GtkWidget * ) p[i], name );
}
char buf[255];
snprintf ( buf, 255, "%s_info", name );
gtk_widget_set_name ( w.label_info_db_settings, buf );
gtk_widget_set_name ( w.label_info_mail_settings, buf );
}
对于那些仍需要特殊设计的小部件,我已经为其分配了单独的名称。在此功能中,我浏览了所有小部件并为其指定了主题名称。
以下代码用于创建菜单。
static void create_actions ( void ) {
const GActionEntry entries[] = {
{ "quit", action_activate_quit },
{ "settings", action_settings },
{ "apply_settings", action_activate_apply_settings },
{ "select_light_theme", action_activate_select_light_theme },
{ "select_dark_theme", action_activate_select_dark_theme },
{ "select_standard_theme", action_activate_select_standard_theme }
};
g_action_map_add_action_entries ( G_ACTION_MAP (app), entries, G_N_ELEMENTS (entries), NULL );
}
然后,我们将这些命令分配给菜单。
pop_menu = g_menu_new ( );
GMenu *menu_app = g_menu_new ( );
GMenu *menu_themes = g_menu_new ( );
g_menu_append ( menu_app, "", "app.settings" );
g_menu_append ( menu_app, "", "app.apply_settings" );
g_menu_append ( menu_themes, " ", "app.select_light_theme" );
g_menu_append ( menu_themes, " ", "app.select_dark_theme" );
g_menu_append ( menu_themes, " ", "app.select_standard_theme" );
g_menu_append_submenu ( menu_app, " ", ( GMenuModel * ) menu_themes );
g_menu_append ( menu_app, "", "app.quit" );
gtk_application_set_app_menu ( app, ( GMenuModel * ) menu_app );
结果,在撒尿这个应用程序后,它变成了美好而美丽的东西。