diff options
| author | Ox Cart | 2015-02-10 11:43:32 -0600 | 
|---|---|---|
| committer | Ox Cart | 2015-02-10 11:43:32 -0600 | 
| commit | b6e3d26dd162a05298bf088a69ab3176aa6b674f (patch) | |
| tree | 9e97f8ff32001100db135bc6f2afac5801382032 | |
| parent | cd8a32a70c1d4626ce0a25d882cfff280e4fa6c7 (diff) | |
| download | systray-issue-2143-ox.tar.bz2 | |
Reverted to non-dynamic linux codeissue-2143-ox
| -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 +} | 
