diff options
Diffstat (limited to 'native/linux.c')
| -rw-r--r-- | native/linux.c | 104 |
1 files changed, 11 insertions, 93 deletions
diff --git a/native/linux.c b/native/linux.c index d8a612a..1cbebbe 100644 --- a/native/linux.c +++ b/native/linux.c @@ -1,6 +1,4 @@ #include <stdlib.h> -#include <stdio.h> -#include <dlfcn.h> #include <string.h> #include <errno.h> #include <limits.h> @@ -13,42 +11,6 @@ static GList *global_menu_items = NULL; // Keep track of all generated temp files to remove when app quits static GArray *global_temp_icon_file_names = NULL; -// Dynamically loaded libraries and functions from libappindicator and libgtk. We do this to support cross-compiling from platforms that don't have these libraries - -void *libglib2; -GArray* (*d_g_array_new()); - -void *libgtk3; -void (*d_gtk_main)(); -GtkWidget* (*d_gtk_menu_new())(); - -void *libappindicator3; -AppIndicator* (*d_app_indicator_new)(const gchar*, const gchar*, AppIndicatorCategory); -void (*d_app_indicator_set_status)(AppIndicator*, AppIndicatorStatus); -void (*d_app_indicator_set_menu)(AppIndicator*, GtkMenu*); -void (*d_app_indicator_set_label)(AppIndicator*, const gchar*, const gchar*); -void (*d_app_indicator_set_icon_full)(AppIndicator*, const gchar*, const gchar*); -void (*d_app_indicator_set_attention_icon_full)(AppIndicator*, const gchar*, const gchar*); - -void *library(const char* name) { - void *handle = dlopen(name, RTLD_LAZY); - if (!handle) { - fputs(dlerror(), stderr); - exit(1); - } - return handle; -} - -void *symbol(void *library, const char* name) { - char *error; - void *sym = dlsym(library, name); - if ((error = dlerror()) != NULL) { - fputs(error, stderr); - exit(1); - } - return sym; -} - typedef struct { GtkWidget *menu_item; char *menu_id; @@ -62,60 +24,16 @@ typedef struct { short checked; } MenuItemInfo; -void load_libraries() { - libglib2 = library("libglib-2.0"); - d_g_array_new = symbol(libglib2, "g_array_new"); - d_g_array_append_val = symbol(libglib2, "g_array_append_val"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - d_ = symbol(libglib2, "replaceme"); - - - libgtk3 = library("libgtk-3"); - d_gtk_init = symbol(libgtk3, "gtk_init"); - d_gtk_menu_new = symbol(libgtk3, "gtk_menu_new"); - d_gtk_main = symbol(libgtk3, "gtk_main"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - d_ = symbol(libgtk3, "replaceme"); - - libappindicator3 = library("libappindicator3"); - d_app_indicator_new = symbol(libappindicator3, "app_indicator_new"); - d_app_indicator_set_status = symbol(libappindicator3, "app_indicator_set_status"); - d_app_indicator_set_menu = symbol(libappindicator3, "app_indicator_set_menu"); - d_app_indicator_set_label = symbol(libappindicator3, "app_indicator_set_label"); - d_app_indicator_set_icon_full = symbol(libappindicator3, "app_indicator_set_icon_full"); - d_app_indicator_set_attention_icon_full = symbol(libappindicator3, "app_indicator_set_attention_icon_full"); - - - - -} - int nativeLoop(void) { - load_libraries(); - d_gtk_init(0, NULL); - global_app_indicator = d_app_indicator_new("systray", "", + gtk_init(0, NULL); + global_app_indicator = app_indicator_new("systray", "", APP_INDICATOR_CATEGORY_APPLICATION_STATUS); - d_app_indicator_set_status(global_app_indicator, APP_INDICATOR_STATUS_ACTIVE); - global_tray_menu = d_gtk_menu_new(); - d_app_indicator_set_menu(global_app_indicator, GTK_MENU(global_tray_menu)); - global_temp_icon_file_names = d_g_array_new(TRUE, FALSE, sizeof(char*)); + app_indicator_set_status(global_app_indicator, APP_INDICATOR_STATUS_ACTIVE); + global_tray_menu = gtk_menu_new(); + app_indicator_set_menu(global_app_indicator, GTK_MENU(global_tray_menu)); + global_temp_icon_file_names = g_array_new(TRUE, FALSE, sizeof(char*)); systray_ready(); - d_gtk_main(); + gtk_main(); return; } @@ -138,8 +56,8 @@ gboolean do_set_icon(gpointer data) { printf("failed to write temp icon file %s: %s\n", temp_file_name, strerror(errno)); return FALSE; } - d_app_indicator_set_icon_full(global_app_indicator, temp_file_name, ""); - d_app_indicator_set_attention_icon_full(global_app_indicator, temp_file_name, ""); + app_indicator_set_icon_full(global_app_indicator, temp_file_name, ""); + app_indicator_set_attention_icon_full(global_app_indicator, temp_file_name, ""); g_bytes_unref(bytes); return FALSE; } @@ -208,7 +126,7 @@ void setIcon(const char* iconBytes, int length) { } void setTitle(char* ctitle) { - d_app_indicator_set_label(global_app_indicator, ctitle, ""); + app_indicator_set_label(global_app_indicator, ctitle, ""); free(ctitle); } @@ -228,4 +146,4 @@ void add_or_update_menu_item(char* menu_id, char* title, char* tooltip, short di void quit() { g_idle_add(do_quit, NULL); -}
\ No newline at end of file +} |
