2011-02-24 04:14:30 +01:00
|
|
|
/* X-Chat
|
|
|
|
|
* Copyright (C) 1998 Peter Zelezny.
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
2012-12-23 11:36:54 -08:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
2011-02-24 04:14:30 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <sys/stat.h>
|
2011-12-11 17:34:02 +01:00
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
#include <gdk/gdkkeysyms.h>
|
|
|
|
|
|
2012-07-21 14:26:19 +02:00
|
|
|
#ifdef WIN32
|
|
|
|
|
#include <io.h>
|
|
|
|
|
#else
|
2011-12-11 17:34:02 +01:00
|
|
|
#include <unistd.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
2011-02-24 04:14:30 +01:00
|
|
|
#include "fe-gtk.h"
|
|
|
|
|
|
2026-01-05 23:12:38 -07:00
|
|
|
#include "../common/zoitechat.h"
|
2011-02-24 04:14:30 +01:00
|
|
|
#include "../common/cfgfiles.h"
|
2026-01-05 23:12:38 -07:00
|
|
|
#include "../common/zoitechatc.h"
|
2011-02-24 04:14:30 +01:00
|
|
|
#include "../common/fe.h"
|
|
|
|
|
#include "menu.h"
|
|
|
|
|
#include "gtkutil.h"
|
|
|
|
|
#include "maingui.h"
|
|
|
|
|
#include "editlist.h"
|
|
|
|
|
|
Added per-file ICON_* macros with GTK3 icon-name mappings and GTK2 stock fallbacks across GTK UI modules like banlist, DCC, editlist, ignore, URL grabber, notify, text events, tray menu, chanview tabs, and join dialog UI.
Updated GTK helper usages to reference the new ICON_* (and label) macros so GTK3 builds no longer pass stock IDs to button/icon helpers or dialogs, including banlist buttons, DCC windows, rawlog actions, notify dialog/buttons, pevent dialog buttons, tray menu items, and join dialog image helper usage.
2026-01-30 09:23:52 -07:00
|
|
|
#define ICON_EDITLIST_NEW "document-new"
|
|
|
|
|
#define ICON_EDITLIST_DELETE "edit-delete"
|
|
|
|
|
#define ICON_EDITLIST_CANCEL "dialog-cancel"
|
|
|
|
|
#define ICON_EDITLIST_SAVE "document-save"
|
|
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
enum
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
NAME_COLUMN,
|
|
|
|
|
CMD_COLUMN,
|
|
|
|
|
N_COLUMNS
|
|
|
|
|
};
|
2011-02-24 04:14:30 +01:00
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
static GtkWidget *editlist_win = NULL;
|
|
|
|
|
static GSList *editlist_list = NULL;
|
2011-02-24 04:14:30 +01:00
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
static GtkTreeModel *
|
|
|
|
|
get_store (void)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
return gtk_tree_view_get_model (g_object_get_data (G_OBJECT (editlist_win), "view"));
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2013-10-21 04:15:59 -04:00
|
|
|
editlist_save (GtkWidget *igad, gchar *file)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
GtkTreeModel *store = get_store ();
|
|
|
|
|
GtkTreeIter iter;
|
2011-02-24 04:14:30 +01:00
|
|
|
char buf[512];
|
2013-10-21 04:15:59 -04:00
|
|
|
char *name, *cmd;
|
|
|
|
|
int fh;
|
2011-02-24 04:14:30 +01:00
|
|
|
|
2026-01-05 23:12:38 -07:00
|
|
|
fh = zoitechat_open_file (file, O_TRUNC | O_WRONLY | O_CREAT, 0600, XOF_DOMODE);
|
2011-02-24 04:14:30 +01:00
|
|
|
if (fh != -1)
|
|
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter))
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
do
|
|
|
|
|
{
|
|
|
|
|
name = NULL;
|
|
|
|
|
cmd = NULL;
|
|
|
|
|
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, NAME_COLUMN, &name, CMD_COLUMN, &cmd, -1);
|
|
|
|
|
g_snprintf (buf, sizeof (buf), "NAME %s\nCMD %s\n\n", name, cmd);
|
|
|
|
|
write (fh, buf, strlen (buf));
|
|
|
|
|
g_free (name);
|
|
|
|
|
g_free (cmd);
|
|
|
|
|
} while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter));
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|
2013-10-21 04:15:59 -04:00
|
|
|
|
2011-02-24 04:14:30 +01:00
|
|
|
close (fh);
|
2013-10-21 04:15:59 -04:00
|
|
|
gtk_widget_destroy (editlist_win);
|
2011-02-24 04:14:30 +01:00
|
|
|
if (editlist_list == replace_list)
|
|
|
|
|
{
|
|
|
|
|
list_free (&replace_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &replace_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
} else if (editlist_list == popup_list)
|
|
|
|
|
{
|
|
|
|
|
list_free (&popup_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &popup_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
} else if (editlist_list == button_list)
|
|
|
|
|
{
|
|
|
|
|
GSList *list = sess_list;
|
|
|
|
|
struct session *sess;
|
|
|
|
|
list_free (&button_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &button_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
while (list)
|
|
|
|
|
{
|
|
|
|
|
sess = (struct session *) list->data;
|
|
|
|
|
fe_buttons_update (sess);
|
|
|
|
|
list = list->next;
|
|
|
|
|
}
|
|
|
|
|
} else if (editlist_list == dlgbutton_list)
|
|
|
|
|
{
|
|
|
|
|
GSList *list = sess_list;
|
|
|
|
|
struct session *sess;
|
|
|
|
|
list_free (&dlgbutton_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &dlgbutton_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
while (list)
|
|
|
|
|
{
|
|
|
|
|
sess = (struct session *) list->data;
|
|
|
|
|
fe_dlgbuttons_update (sess);
|
|
|
|
|
list = list->next;
|
|
|
|
|
}
|
|
|
|
|
} else if (editlist_list == ctcp_list)
|
|
|
|
|
{
|
|
|
|
|
list_free (&ctcp_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &ctcp_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
} else if (editlist_list == command_list)
|
|
|
|
|
{
|
|
|
|
|
list_free (&command_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &command_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
} else if (editlist_list == usermenu_list)
|
|
|
|
|
{
|
|
|
|
|
list_free (&usermenu_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &usermenu_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
usermenu_update ();
|
|
|
|
|
} else
|
|
|
|
|
{
|
|
|
|
|
list_free (&urlhandler_list);
|
2013-10-21 04:15:59 -04:00
|
|
|
list_loadconf (file, &urlhandler_list, 0);
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2013-10-21 04:15:59 -04:00
|
|
|
editlist_load (GtkListStore *store, GSList *list)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
struct popup *pop;
|
|
|
|
|
gchar *name, *cmd;
|
|
|
|
|
GtkTreeIter iter;
|
2011-02-24 04:14:30 +01:00
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
while (list)
|
|
|
|
|
{
|
|
|
|
|
pop = (struct popup *) list->data;
|
|
|
|
|
name = pop->name;
|
|
|
|
|
cmd = pop->cmd;
|
2011-02-24 04:14:30 +01:00
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
gtk_list_store_append (store, &iter);
|
|
|
|
|
gtk_list_store_set (store, &iter,
|
|
|
|
|
NAME_COLUMN, name,
|
|
|
|
|
CMD_COLUMN, cmd, -1);
|
|
|
|
|
|
|
|
|
|
list = list->next;
|
|
|
|
|
}
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2013-10-21 04:15:59 -04:00
|
|
|
editlist_delete (GtkWidget *wid, gpointer userdata)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
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;
|
2011-02-24 04:14:30 +01:00
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
if (gtkutil_treeview_get_selected (view, &iter, -1))
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
/* 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);
|
|
|
|
|
}
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void
|
2013-10-21 04:15:59 -04:00
|
|
|
editlist_add (GtkWidget *wid, gpointer userdata)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
GtkTreeView *view = g_object_get_data (G_OBJECT (editlist_win), "view");
|
|
|
|
|
GtkTreeViewColumn *col;
|
|
|
|
|
GtkListStore *store = GTK_LIST_STORE (get_store ());
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
GtkTreePath *path;
|
|
|
|
|
|
|
|
|
|
gtk_list_store_append (store, &iter);
|
|
|
|
|
|
|
|
|
|
/* make sure the new row is visible and selected */
|
|
|
|
|
path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter);
|
|
|
|
|
col = gtk_tree_view_get_column (view, NAME_COLUMN);
|
|
|
|
|
gtk_tree_view_scroll_to_cell (view, path, NULL, FALSE, 0.0, 0.0);
|
|
|
|
|
gtk_tree_view_set_cursor (view, path, col, TRUE);
|
|
|
|
|
gtk_tree_path_free (path);
|
|
|
|
|
}
|
2011-02-24 04:14:30 +01:00
|
|
|
|
|
|
|
|
static void
|
2013-10-21 04:15:59 -04:00
|
|
|
editlist_close (GtkWidget *wid, gpointer userdata)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
gtk_widget_destroy (editlist_win);
|
|
|
|
|
editlist_win = NULL;
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|
|
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
static void
|
|
|
|
|
editlist_edited (GtkCellRendererText *render, gchar *pathstr, gchar *new_text, gpointer data)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
GtkTreeModel *model = get_store ();
|
|
|
|
|
GtkTreePath *path = gtk_tree_path_new_from_string (pathstr);
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
gint column = GPOINTER_TO_INT (data);
|
|
|
|
|
|
|
|
|
|
gtk_tree_model_get_iter (model, &iter, path);
|
2014-02-07 02:27:44 -05:00
|
|
|
gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, new_text, -1);
|
2013-10-21 04:15:59 -04:00
|
|
|
|
|
|
|
|
gtk_tree_path_free (path);
|
|
|
|
|
}
|
2011-02-24 04:14:30 +01:00
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
static gboolean
|
|
|
|
|
editlist_keypress (GtkWidget *wid, GdkEventKey *evt, gpointer userdata)
|
|
|
|
|
{
|
|
|
|
|
GtkTreeView *view = g_object_get_data (G_OBJECT (editlist_win), "view");
|
|
|
|
|
GtkTreeModel *store;
|
|
|
|
|
GtkTreeIter iter1, iter2;
|
|
|
|
|
GtkTreeSelection *sel;
|
|
|
|
|
GtkTreePath *path;
|
|
|
|
|
gboolean handled = FALSE;
|
|
|
|
|
int delta;
|
|
|
|
|
|
|
|
|
|
if (evt->state & GDK_SHIFT_MASK)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
if (evt->keyval == GDK_KEY_Up)
|
|
|
|
|
{
|
|
|
|
|
handled = TRUE;
|
|
|
|
|
delta = -1;
|
|
|
|
|
}
|
|
|
|
|
else if (evt->keyval == GDK_KEY_Down)
|
|
|
|
|
{
|
|
|
|
|
handled = TRUE;
|
|
|
|
|
delta = 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (handled)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
sel = gtk_tree_view_get_selection (view);
|
|
|
|
|
gtk_tree_selection_get_selected (sel, &store, &iter1);
|
|
|
|
|
path = gtk_tree_model_get_path (store, &iter1);
|
|
|
|
|
if (delta == 1)
|
|
|
|
|
gtk_tree_path_next (path);
|
|
|
|
|
else
|
|
|
|
|
gtk_tree_path_prev (path);
|
|
|
|
|
gtk_tree_model_get_iter (store, &iter2, path);
|
|
|
|
|
gtk_tree_path_free (path);
|
|
|
|
|
gtk_list_store_swap (GTK_LIST_STORE (store), &iter1, &iter2);
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|
|
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
return handled;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static GtkWidget *
|
|
|
|
|
editlist_treeview_new (GtkWidget *box, char *title1, char *title2)
|
|
|
|
|
{
|
|
|
|
|
GtkWidget *scroll;
|
|
|
|
|
GtkListStore *store;
|
|
|
|
|
GtkTreeViewColumn *col;
|
|
|
|
|
GtkWidget *view;
|
|
|
|
|
GtkCellRenderer *render;
|
|
|
|
|
|
|
|
|
|
scroll = gtk_scrolled_window_new (NULL, NULL);
|
|
|
|
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
|
|
|
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scroll), GTK_SHADOW_IN);
|
|
|
|
|
|
|
|
|
|
store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
|
|
|
|
|
g_return_val_if_fail (store != NULL, NULL);
|
|
|
|
|
|
|
|
|
|
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
|
|
|
|
|
gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (view), TRUE);
|
|
|
|
|
gtk_tree_view_set_enable_search (GTK_TREE_VIEW (view), FALSE);
|
2015-02-08 01:51:22 -05:00
|
|
|
gtk_tree_view_set_reorderable (GTK_TREE_VIEW (view), TRUE);
|
2013-10-21 04:15:59 -04:00
|
|
|
|
|
|
|
|
g_signal_connect (G_OBJECT (view), "key_press_event",
|
|
|
|
|
G_CALLBACK (editlist_keypress), NULL);
|
|
|
|
|
|
|
|
|
|
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (view), TRUE);
|
|
|
|
|
|
|
|
|
|
render = gtk_cell_renderer_text_new ();
|
|
|
|
|
g_object_set (render, "editable", TRUE, NULL);
|
|
|
|
|
g_signal_connect (G_OBJECT (render), "edited",
|
2013-10-22 06:21:58 -04:00
|
|
|
G_CALLBACK (editlist_edited), GINT_TO_POINTER(NAME_COLUMN));
|
2013-10-21 04:15:59 -04:00
|
|
|
gtk_tree_view_insert_column_with_attributes (
|
|
|
|
|
GTK_TREE_VIEW (view), NAME_COLUMN,
|
|
|
|
|
title1, render,
|
2014-02-07 02:27:44 -05:00
|
|
|
"text", NAME_COLUMN,
|
2013-10-21 04:15:59 -04:00
|
|
|
NULL);
|
|
|
|
|
|
|
|
|
|
render = gtk_cell_renderer_text_new ();
|
|
|
|
|
g_object_set (render, "editable", TRUE, NULL);
|
|
|
|
|
g_signal_connect (G_OBJECT (render), "edited",
|
2013-10-22 06:21:58 -04:00
|
|
|
G_CALLBACK (editlist_edited), GINT_TO_POINTER(CMD_COLUMN));
|
2013-10-21 04:15:59 -04:00
|
|
|
gtk_tree_view_insert_column_with_attributes (
|
|
|
|
|
GTK_TREE_VIEW (view), CMD_COLUMN,
|
|
|
|
|
title2, render,
|
2014-02-07 02:27:44 -05:00
|
|
|
"text", CMD_COLUMN,
|
2013-10-21 04:15:59 -04:00
|
|
|
NULL);
|
|
|
|
|
|
|
|
|
|
col = gtk_tree_view_get_column (GTK_TREE_VIEW (view), NAME_COLUMN);
|
|
|
|
|
gtk_tree_view_column_set_sizing (col, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
|
|
|
|
|
gtk_tree_view_column_set_resizable (col, TRUE);
|
|
|
|
|
gtk_tree_view_column_set_min_width (col, 100);
|
|
|
|
|
|
|
|
|
|
gtk_container_add (GTK_CONTAINER (scroll), view);
|
2026-02-16 18:40:15 -07:00
|
|
|
gtk_box_pack_start (GTK_BOX (box), scroll, TRUE, TRUE, 0);
|
2013-10-21 04:15:59 -04:00
|
|
|
gtk_widget_show_all (box);
|
|
|
|
|
|
|
|
|
|
return view;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
editlist_gui_open (char *title1, char *title2, GSList *list, char *title, char *wmclass,
|
|
|
|
|
char *file, char *help)
|
|
|
|
|
{
|
|
|
|
|
GtkWidget *vbox, *box;
|
|
|
|
|
GtkWidget *view;
|
|
|
|
|
GtkListStore *store;
|
|
|
|
|
|
|
|
|
|
if (editlist_win)
|
2011-02-24 04:14:30 +01:00
|
|
|
{
|
2013-10-21 04:15:59 -04:00
|
|
|
mg_bring_tofront (editlist_win);
|
2011-02-24 04:14:30 +01:00
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2013-10-21 04:15:59 -04:00
|
|
|
editlist_win = mg_create_generic_tab (wmclass, title, TRUE, FALSE,
|
|
|
|
|
editlist_close, NULL, 450, 250, &vbox, 0);
|
|
|
|
|
|
2011-02-24 04:14:30 +01:00
|
|
|
editlist_list = list;
|
2013-10-21 04:15:59 -04:00
|
|
|
|
|
|
|
|
view = editlist_treeview_new (vbox, title1, title2);
|
|
|
|
|
g_object_set_data (G_OBJECT (editlist_win), "view", view);
|
|
|
|
|
|
2014-02-09 02:42:40 -05:00
|
|
|
if (help)
|
|
|
|
|
gtk_widget_set_tooltip_text (view, help);
|
|
|
|
|
|
2026-01-30 17:03:27 -07:00
|
|
|
box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
|
|
|
|
|
gtk_button_box_set_layout (GTK_BUTTON_BOX (box), GTK_BUTTONBOX_SPREAD);
|
2013-10-21 04:15:59 -04:00
|
|
|
gtk_box_pack_start (GTK_BOX (vbox), box, FALSE, FALSE, 2);
|
|
|
|
|
gtk_container_set_border_width (GTK_CONTAINER (box), 5);
|
|
|
|
|
gtk_widget_show (box);
|
|
|
|
|
|
Added per-file ICON_* macros with GTK3 icon-name mappings and GTK2 stock fallbacks across GTK UI modules like banlist, DCC, editlist, ignore, URL grabber, notify, text events, tray menu, chanview tabs, and join dialog UI.
Updated GTK helper usages to reference the new ICON_* (and label) macros so GTK3 builds no longer pass stock IDs to button/icon helpers or dialogs, including banlist buttons, DCC windows, rawlog actions, notify dialog/buttons, pevent dialog buttons, tray menu items, and join dialog image helper usage.
2026-01-30 09:23:52 -07:00
|
|
|
gtkutil_button (box, ICON_EDITLIST_NEW, 0, editlist_add,
|
2013-10-21 04:15:59 -04:00
|
|
|
NULL, _("Add"));
|
Added per-file ICON_* macros with GTK3 icon-name mappings and GTK2 stock fallbacks across GTK UI modules like banlist, DCC, editlist, ignore, URL grabber, notify, text events, tray menu, chanview tabs, and join dialog UI.
Updated GTK helper usages to reference the new ICON_* (and label) macros so GTK3 builds no longer pass stock IDs to button/icon helpers or dialogs, including banlist buttons, DCC windows, rawlog actions, notify dialog/buttons, pevent dialog buttons, tray menu items, and join dialog image helper usage.
2026-01-30 09:23:52 -07:00
|
|
|
gtkutil_button (box, ICON_EDITLIST_DELETE, 0, editlist_delete,
|
2013-10-21 04:15:59 -04:00
|
|
|
NULL, _("Delete"));
|
Added per-file ICON_* macros with GTK3 icon-name mappings and GTK2 stock fallbacks across GTK UI modules like banlist, DCC, editlist, ignore, URL grabber, notify, text events, tray menu, chanview tabs, and join dialog UI.
Updated GTK helper usages to reference the new ICON_* (and label) macros so GTK3 builds no longer pass stock IDs to button/icon helpers or dialogs, including banlist buttons, DCC windows, rawlog actions, notify dialog/buttons, pevent dialog buttons, tray menu items, and join dialog image helper usage.
2026-01-30 09:23:52 -07:00
|
|
|
gtkutil_button (box, ICON_EDITLIST_CANCEL, 0, editlist_close,
|
2013-10-21 04:15:59 -04:00
|
|
|
NULL, _("Cancel"));
|
Added per-file ICON_* macros with GTK3 icon-name mappings and GTK2 stock fallbacks across GTK UI modules like banlist, DCC, editlist, ignore, URL grabber, notify, text events, tray menu, chanview tabs, and join dialog UI.
Updated GTK helper usages to reference the new ICON_* (and label) macros so GTK3 builds no longer pass stock IDs to button/icon helpers or dialogs, including banlist buttons, DCC windows, rawlog actions, notify dialog/buttons, pevent dialog buttons, tray menu items, and join dialog image helper usage.
2026-01-30 09:23:52 -07:00
|
|
|
gtkutil_button (box, ICON_EDITLIST_SAVE, 0, editlist_save,
|
2013-10-21 04:15:59 -04:00
|
|
|
file, _("Save"));
|
|
|
|
|
|
|
|
|
|
store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));
|
|
|
|
|
editlist_load (store, list);
|
|
|
|
|
|
|
|
|
|
gtk_widget_show (editlist_win);
|
2011-02-24 04:14:30 +01:00
|
|
|
}
|