int main(int argc, char **argv) { gchar *backend = NULL; gchar *backend_opt = NULL; gchar *majacd_app = NULL; GOptionEntry entries[] = { {"backend", 'b', 0, G_OPTION_ARG_STRING, &backend_opt, "Path to majacd application", "<path>"}, {NULL} }; GError *err = NULL; GOptionContext *context; GtkWidget *err_dialog; context = g_option_context_new("- system tray icon to " "control the majacd application"); g_option_context_add_group(context, gtk_get_option_group(TRUE)); g_option_context_add_main_entries(context, entries, NULL); g_option_context_parse(context, &argc, &argv, &err); g_option_context_free(context); if (backend_opt) { backend = g_strdup(backend_opt); } else { backend = g_strdup(MAJACD_APP); } gtk_init(&argc, &argv); if (!(majacd_app = g_find_program_in_path(backend))) { err_dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Could not locate the majacd application"); gtk_window_set_title(GTK_WINDOW(err_dialog), "Error"); gtk_dialog_run(GTK_DIALOG(err_dialog)); gtk_widget_destroy(err_dialog); g_error("Could not locate the majacd application\n"); /* NOT REACHED */ return EXIT_FAILURE; } if (backend_ctl_command(CMD_INIT, (gpointer) majacd_app) < 0) { g_error("Error starting %s", majacd_app); } main_window_create(); main_window_hide(); tray_icon_create(); gtk_main(); g_free(backend); g_free(majacd_app); return EXIT_SUCCESS; }
gboolean notification_trayicon_main_window_close(gpointer source, gpointer data) { if(!notify_config.trayicon_enabled) return FALSE; if(source) { gboolean *close_allowed = (gboolean*)source; if(notify_config.trayicon_close_to_tray) { MainWindow *mainwin = mainwindow_get_mainwindow(); *close_allowed = FALSE; if(mainwin && gtk_widget_get_visible(GTK_WIDGET(mainwin->window))) main_window_hide(mainwin); } } return FALSE; }
gint plugin_init(gchar **error) { gchar *rcpath; /* Version check */ /* No be able to test against new-contacts */ if(!check_plugin_version(MAKE_NUMERIC_VERSION(3,8,1,46), VERSION_NUMERIC, _("Notification"), error)) return -1; /* Check if threading is enabled */ if(!g_thread_supported()) { *error = g_strdup(_("The Notification plugin needs threading support.")); return -1; } hook_f_item = hooks_register_hook(FOLDER_ITEM_UPDATE_HOOKLIST, my_folder_item_update_hook, NULL); if(hook_f_item == (guint) -1) { *error = g_strdup(_("Failed to register folder item update hook in the " "Notification plugin")); return -1; } hook_f = hooks_register_hook(FOLDER_UPDATE_HOOKLIST, my_folder_update_hook, NULL); if(hook_f == (guint) -1) { *error = g_strdup(_("Failed to register folder update hook in the " "Notification plugin")); hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, hook_f_item); return -1; } hook_m_info = hooks_register_hook(MSGINFO_UPDATE_HOOKLIST, my_msginfo_update_hook, NULL); if(hook_m_info == (guint) -1) { *error = g_strdup(_("Failed to register msginfo update hook in the " "Notification plugin")); hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, hook_f_item); hooks_unregister_hook(FOLDER_UPDATE_HOOKLIST, hook_f); return -1; } hook_offline = hooks_register_hook(OFFLINE_SWITCH_HOOKLIST, my_offline_switch_hook, NULL); if(hook_offline == (guint) -1) { *error = g_strdup(_("Failed to register offline switch hook in the " "Notification plugin")); hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, hook_f_item); hooks_unregister_hook(FOLDER_UPDATE_HOOKLIST, hook_f); hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST, hook_m_info); return -1; } hook_mw_close = hooks_register_hook(MAIN_WINDOW_CLOSE, my_main_window_close_hook, NULL); if(hook_mw_close == (guint) -1) { *error = g_strdup(_("Failed to register main window close hook in the " "Notification plugin")); hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, hook_f_item); hooks_unregister_hook(FOLDER_UPDATE_HOOKLIST, hook_f); hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST, hook_m_info); hooks_unregister_hook(OFFLINE_SWITCH_HOOKLIST, hook_offline); return -1; } hook_got_iconified = hooks_register_hook(MAIN_WINDOW_GOT_ICONIFIED, my_main_window_got_iconified_hook, NULL); if(hook_got_iconified == (guint) -1) { *error = g_strdup(_("Failed to register got iconified hook in the " "Notification plugin")); hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, hook_f_item); hooks_unregister_hook(FOLDER_UPDATE_HOOKLIST, hook_f); hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST, hook_m_info); hooks_unregister_hook(OFFLINE_SWITCH_HOOKLIST, hook_offline); hooks_unregister_hook(MAIN_WINDOW_CLOSE, hook_mw_close); return -1; } hook_account = hooks_register_hook(ACCOUNT_LIST_CHANGED_HOOKLIST, my_account_list_changed_hook, NULL); if (hook_account == (guint) -1) { *error = g_strdup(_("Failed to register account list changed hook in the " "Notification plugin")); hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, hook_f_item); hooks_unregister_hook(FOLDER_UPDATE_HOOKLIST, hook_f); hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST, hook_m_info); hooks_unregister_hook(OFFLINE_SWITCH_HOOKLIST, hook_offline); hooks_unregister_hook(MAIN_WINDOW_CLOSE, hook_mw_close); hooks_unregister_hook(MAIN_WINDOW_GOT_ICONIFIED, hook_got_iconified); return -1; } hook_theme_changed = hooks_register_hook(THEME_CHANGED_HOOKLIST, my_update_theme_hook, NULL); if(hook_theme_changed == (guint)-1) { *error = g_strdup(_("Failed to register theme change hook int the " "Notification plugin")); hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, hook_f_item); hooks_unregister_hook(FOLDER_UPDATE_HOOKLIST, hook_f); hooks_unregister_hook(MSGINFO_UPDATE_HOOKLIST, hook_m_info); hooks_unregister_hook(OFFLINE_SWITCH_HOOKLIST, hook_offline); hooks_unregister_hook(MAIN_WINDOW_CLOSE, hook_mw_close); hooks_unregister_hook(MAIN_WINDOW_GOT_ICONIFIED, hook_got_iconified); hooks_unregister_hook(ACCOUNT_LIST_CHANGED_HOOKLIST, hook_account); return -1; } /* Configuration */ prefs_set_default(notify_param); rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, COMMON_RC, NULL); prefs_read_config(notify_param, "NotificationPlugin", rcpath, NULL); g_free(rcpath); /* Folder specific stuff */ notification_foldercheck_read_array(); notification_notified_hash_startup_init(); notify_gtk_init(); #ifdef NOTIFICATION_BANNER notification_update_banner(); #endif #ifdef NOTIFICATION_LCDPROC notification_lcdproc_connect(); #endif #ifdef NOTIFICATION_TRAYICON if(notify_config.trayicon_enabled && notify_config.trayicon_hide_at_startup && claws_is_starting()) { MainWindow *mainwin = mainwindow_get_mainwindow(); g_idle_add(trayicon_startup_idle,NULL); if(mainwin && gtk_widget_get_visible(GTK_WIDGET(mainwin->window))) main_window_hide(mainwin); main_set_show_at_startup(FALSE); } #endif my_account_list_changed_hook(NULL,NULL); if(notify_config.urgency_hint_new || notify_config.urgency_hint_unread) notification_update_msg_counts(NULL); #ifdef NOTIFICATION_HOTKEYS notification_hotkeys_update_bindings(); #endif debug_print("Notification plugin loaded\n"); return 0; }