static gboolean pluginwindow_key_pressed(GtkWidget *widget, GdkEventKey *event, PluginWindow *pluginwindow) { if (event) { switch (event->keyval) { case GDK_KEY_Escape : case GDK_KEY_Return : case GDK_KEY_KP_Enter : close_cb(NULL, pluginwindow); break; case GDK_KEY_Insert : case GDK_KEY_KP_Insert : case GDK_KEY_KP_Add : case GDK_KEY_plus : load_cb(NULL, pluginwindow); break; case GDK_KEY_Delete : case GDK_KEY_KP_Delete : case GDK_KEY_KP_Subtract : case GDK_KEY_minus : unload_cb(NULL, pluginwindow); break; default : break; } } return FALSE; }
void load_cb(GtkButton* button, gpointer user_data) { /* Load load dialog */ int response = gtk_dialog_run(GTK_DIALOG(load_dialog)); if(response != 0) { gtk_widget_hide(GTK_WIDGET(load_dialog)); return; } /* Get filename */ char* filename; filename = gtk_file_chooser_get_filename(load_dialog); /* Check is not empty */ DEBUG("Selected file: %s\n", filename); if((filename == NULL) || is_empty_string(filename)) { show_error(window, "Please select a file."); g_free(filename); load_cb(button, user_data); return; } gtk_widget_hide(GTK_WIDGET(load_dialog)); /* Try to open file for reading */ if(!file_exists(filename)) { show_error(window, "The selected file doesn't exists."); return; } FILE* file = fopen(filename, "r"); if(file == NULL) { show_error(window, "An error ocurred while trying to open " "the file. Check you have permissions."); return; } /* Load file */ DEBUG("Loading file %s\n", filename); load(file); /* Free resources */ fclose(file); g_free(filename); }
gboolean purple_plugin_load(PurplePlugin *plugin) { #ifdef PURPLE_PLUGINS GList *dep_list = NULL; GList *l; g_return_val_if_fail(plugin != NULL, FALSE); if (purple_plugin_is_loaded(plugin)) return TRUE; if (purple_plugin_is_unloadable(plugin)) return FALSE; g_return_val_if_fail(plugin->error == NULL, FALSE); /* * Go through the list of the plugin's dependencies. * * First pass: Make sure all the plugins needed are probed. */ for (l = plugin->info->dependencies; l != NULL; l = l->next) { const char *dep_name = (const char *)l->data; PurplePlugin *dep_plugin; dep_plugin = purple_plugins_find_with_id(dep_name); if (dep_plugin == NULL) { char *tmp; tmp = g_strdup_printf(_("The required plugin %s was not found. " "Please install this plugin and try again."), dep_name); purple_notify_error(NULL, NULL, _("Unable to load the plugin"), tmp); g_free(tmp); g_list_free(dep_list); return FALSE; } dep_list = g_list_append(dep_list, dep_plugin); } /* Second pass: load all the required plugins. */ for (l = dep_list; l != NULL; l = l->next) { PurplePlugin *dep_plugin = (PurplePlugin *)l->data; if (!purple_plugin_is_loaded(dep_plugin)) { if (!purple_plugin_load(dep_plugin)) { char *tmp; tmp = g_strdup_printf(_("The required plugin %s was unable to load."), plugin->info->name); purple_notify_error(NULL, NULL, _("Unable to load your plugin."), tmp); g_free(tmp); g_list_free(dep_list); return FALSE; } } } /* Third pass: note that other plugins are dependencies of this plugin. * This is done separately in case we had to bail out earlier. */ for (l = dep_list; l != NULL; l = l->next) { PurplePlugin *dep_plugin = (PurplePlugin *)l->data; dep_plugin->dependent_plugins = g_list_prepend(dep_plugin->dependent_plugins, plugin->info->id); } g_list_free(dep_list); if (plugin->native_plugin) { if (plugin->info != NULL && plugin->info->load != NULL) { if (!plugin->info->load(plugin)) return FALSE; } } else { PurplePlugin *loader; PurplePluginLoaderInfo *loader_info; loader = find_loader_for_plugin(plugin); if (loader == NULL) return FALSE; loader_info = PURPLE_PLUGIN_LOADER_INFO(loader); if (loader_info->load != NULL) { if (!loader_info->load(plugin)) return FALSE; } } loaded_plugins = g_list_insert_sorted(loaded_plugins, plugin, compare_plugins); plugin->loaded = TRUE; if (load_cb != NULL) load_cb(plugin, load_cb_data); purple_signal_emit(purple_plugins_get_handle(), "plugin-load", plugin); return TRUE; #else return TRUE; #endif /* !PURPLE_PLUGINS */ }