static void plugingui_unload (GtkWidget * wid, gpointer unused) { char *modname, *file, *buf; GtkTreeView *view; GtkTreeIter iter; view = g_object_get_data (G_OBJECT (plugin_window), "view"); if (!gtkutil_treeview_get_selected (view, &iter, NAME_COLUMN, &modname, FILE_COLUMN, &file, -1)) return; if (g_str_has_suffix (file, "."G_MODULE_SUFFIX)) { if (plugin_kill (modname, FALSE) == 2) fe_message (_("That plugin is refusing to unload.\n"), FE_MSG_ERROR); } else { /* let python.so or perl.so handle it */ buf = malloc (strlen (file) + 10); if (strchr (file, ' ')) sprintf (buf, "UNLOAD \"%s\"", file); else sprintf (buf, "UNLOAD %s", file); handle_command (current_sess, buf, FALSE); free (buf); } g_free (modname); g_free (file); }
static gboolean url_treeview_url_clicked_cb (GtkWidget *view, GdkEventButton *event, gpointer data) { GtkTreeIter iter; gchar *url; if (!event || !gtkutil_treeview_get_selected (GTK_TREE_VIEW (view), &iter, URL_COLUMN, &url, -1)) { return FALSE; } switch (event->button) { case 1: if (event->type == GDK_2BUTTON_PRESS) fe_open_url (url); break; case 3: menu_urlmenu (event, url); break; default: break; } g_free (url); return FALSE; }
static void pevent_dialog_update (GtkWidget * wid, GtkWidget * twid) { int len, m; const char *text; char *out; int sig; GtkTreeIter iter; GtkListStore *store; if (!gtkutil_treeview_get_selected (GTK_TREE_VIEW (pevent_dialog_list), &iter, COL_ROW, &sig, -1)) return; text = gtk_entry_get_text (GTK_ENTRY (wid)); len = strlen (text); if (pevt_build_string (text, &out, &m) != 0) { fe_message (_("There was an error parsing the string"), FE_MSG_ERROR); return; } if (m > (te[sig].num_args & 0x7f)) { free (out); out = malloc (4096); snprintf (out, 4096, _("This signal is only passed %d args, $%d is invalid"), te[sig].num_args & 0x7f, m); fe_message (out, FE_MSG_WARN); free (out); return; } store = (GtkListStore *)gtk_tree_view_get_model (GTK_TREE_VIEW (pevent_dialog_list)); gtk_list_store_set (store, &iter, COL_EVENT_TEXT, text, -1); if (pntevts_text[sig]) free (pntevts_text[sig]); if (pntevts[sig]) free (pntevts[sig]); pntevts_text[sig] = malloc (len + 1); memcpy (pntevts_text[sig], text, len + 1); pntevts[sig] = out; out = malloc (len + 2); memcpy (out, text, len + 1); out[len] = '\n'; out[len + 1] = 0; check_special_chars (out, TRUE); PrintTextRaw (GTK_XTEXT (twid)->buffer, out, 0, 0); free (out); /* save this when we exit */ prefs.save_pevents = 1; }
static void url_button_copy (GtkWidget *widget, gpointer data) { GtkTreeView *view = GTK_TREE_VIEW (data); GtkTreeIter iter; gchar *url = NULL; if (gtkutil_treeview_get_selected (view, &iter, URL_COLUMN, &url, -1)) { gtkutil_copy_to_clipboard (GTK_WIDGET (view), NULL, url); g_free (url); } }
static void notify_opendialog_clicked (GtkWidget * igad) { GtkTreeView *view; GtkTreeIter iter; struct notify_per_server *servnot; view = g_object_get_data (G_OBJECT (notify_window), "view"); if (gtkutil_treeview_get_selected (view, &iter, NPS_COLUMN, &servnot, -1)) { if (servnot) open_query (servnot->server, servnot->notify->name, TRUE); } }
static void notify_row_cb (GtkTreeSelection *sel, GtkTreeView *view) { GtkTreeIter iter; struct notify_per_server *servnot; if (gtkutil_treeview_get_selected (view, &iter, NPS_COLUMN, &servnot, -1)) { gtk_widget_set_sensitive (notify_button_opendialog, servnot ? servnot->ison : 0); gtk_widget_set_sensitive (notify_button_remove, TRUE); return; } gtk_widget_set_sensitive (notify_button_opendialog, FALSE); gtk_widget_set_sensitive (notify_button_remove, FALSE); }
static void pevent_dialog_select (GtkTreeSelection *sel, gpointer store) { char *text; int sig; GtkTreeIter iter; if (!gtkutil_treeview_get_selected (GTK_TREE_VIEW (pevent_dialog_list), &iter, COL_ROW, &sig, -1)) { pevent_dialog_unselect (); } else { gtk_tree_model_get (store, &iter, COL_EVENT_TEXT, &text, -1); gtk_entry_set_text (GTK_ENTRY (pevent_dialog_entry), text); g_free (text); pevent_dialog_hfill (pevent_dialog_hlist, sig); } }
static void editlist_delete (GtkWidget *wid, gpointer userdata) { GtkTreeView *view = g_object_get_data (G_OBJECT (editlist_win), "view"); GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (view)); GtkTreeIter iter; GtkTreePath *path; if (gtkutil_treeview_get_selected (view, &iter, -1)) { /* delete this row, select next one */ if (gtk_list_store_remove (store, &iter)) { path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter); gtk_tree_view_scroll_to_cell (view, path, NULL, TRUE, 1.0, 0.0); gtk_tree_view_set_cursor (view, path, NULL, FALSE); gtk_tree_path_free (path); } } }
static void plugingui_unload (GtkWidget * wid, gpointer unused) { int len; char *modname, *file, *buf; GtkTreeView *view; GtkTreeIter iter; view = g_object_get_data (G_OBJECT (plugin_window), "view"); if (!gtkutil_treeview_get_selected (view, &iter, NAME_COLUMN, &modname, FILE_COLUMN, &file, -1)) return; len = strlen (file); #ifdef WIN32 if (len > 4 && g_ascii_strcasecmp (file + len - 4, ".dll") == 0) #else #if defined(__hpux) if (len > 3 && g_ascii_strcasecmp (file + len - 3, ".sl") == 0) #else if (len > 3 && g_ascii_strcasecmp (file + len - 3, ".so") == 0) #endif #endif { if (plugin_kill (modname, FALSE) == 2) fe_message (_("That plugin is refusing to unload.\n"), FE_MSG_ERROR); } else { /* let python.so or perl.so handle it */ buf = malloc (strlen (file) + 10); if (strchr (file, ' ')) sprintf (buf, "UNLOAD \"%s\"", file); else sprintf (buf, "UNLOAD %s", file); handle_command (current_sess, buf, FALSE); free (buf); } g_free (modname); g_free (file); }
static void notify_remove_clicked (GtkWidget * igad) { GtkTreeView *view; GtkTreeModel *model; GtkTreeIter iter; GtkTreePath *path = NULL; gboolean found = FALSE; char *name; view = g_object_get_data (G_OBJECT (notify_window), "view"); if (gtkutil_treeview_get_selected (view, &iter, USER_COLUMN, &name, -1)) { model = gtk_tree_view_get_model (view); found = (*name != 0); while (!found) /* the real nick is some previous node */ { g_free (name); /* it's useless to us */ if (!path) path = gtk_tree_model_get_path (model, &iter); if (!gtk_tree_path_prev (path)) /* arrgh! no previous node! */ { g_warning ("notify list state is invalid\n"); break; } if (!gtk_tree_model_get_iter (model, &iter, path)) break; gtk_tree_model_get (model, &iter, USER_COLUMN, &name, -1); found = (*name != 0); } if (path) gtk_tree_path_free (path); if (!found) return; /* ok, now we can remove it */ gtk_list_store_remove (GTK_LIST_STORE (model), &iter); notify_deluser (name); g_free (name); } }
static gboolean url_treeview_url_clicked_cb (GtkWidget *view, GdkEventButton *event, gpointer data) { GtkTreeIter iter; gchar *url; GtkTreeSelection *sel; GtkTreePath *path; GtkTreeView *tree = GTK_TREE_VIEW (view); if (!event || !gtk_tree_view_get_path_at_pos (tree, event->x, event->y, &path, 0, 0, 0)) return FALSE; /* select what they right-clicked on */ sel = gtk_tree_view_get_selection (tree); gtk_tree_selection_unselect_all (sel); gtk_tree_selection_select_path (sel, path); gtk_tree_path_free (path); if (!gtkutil_treeview_get_selected (GTK_TREE_VIEW (view), &iter, URL_COLUMN, &url, -1)) return FALSE; switch (event->button) { case 1: if (event->type == GDK_2BUTTON_PRESS) fe_open_url (url); break; case 3: menu_urlmenu (event, url); break; default: break; } g_free (url); return FALSE; }
static void ignore_delete_entry_clicked (GtkWidget * wid, struct session *sess) { GtkTreeView *view = static_cast<GtkTreeView *>(g_object_get_data(G_OBJECT(ignorewin), "view")); GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (view)); GtkTreeIter iter; char *mask = NULL; if (gtkutil_treeview_get_selected (view, &iter, 0, &mask, -1)) { glib_string mask_ptr(mask); /* delete this row, select next one */ if (gtk_list_store_remove (store, &iter)) { GtkTreePathPtr path(gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter)); gtk_tree_view_scroll_to_cell (view, path.get(), NULL, TRUE, 1.0, 0.0); gtk_tree_view_set_cursor (view, path.get(), NULL, FALSE); } ignore_del (mask); } }