📄 callbacks.c
字号:
#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <gnome.h>#include <gconf/gconf-client.h>#include "callbacks.h"#include "interface.h"#include "support.h"#include "main.h"voidon_file_new_type_menu_activate (GtkMenuItem * menuitem, gpointer user_data){ rcm_show_ConnectionTypesWindow();}voidon_edit_delete_menu_activate (GtkMenuItem * menuitem, gpointer user_data){ GnomeIconList *icon_list; gint i; GList *l; gchar *name; Connection *connection; GtkWidget *yes_no_dialog; int ret; gchar buff[MAX_BUFFER_LENGTH]; icon_list = GNOME_ICON_LIST (lookup_widget (MainWindow, "MainList")); g_return_if_fail (icon_list != NULL); l = gnome_icon_list_get_selection (icon_list); if (l) { i = GPOINTER_TO_INT (l->data); connection = g_slist_nth_data (ConnectionsSList, i); g_return_if_fail (connection != NULL); snprintf (buff, MAX_BUFFER_LENGTH, _("Are you sure you want to delete %s?"), connection->Name); yes_no_dialog = gnome_message_box_new (buff, GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES, GNOME_STOCK_BUTTON_NO, NULL); ret = gnome_dialog_run (GNOME_DIALOG (yes_no_dialog)); if (ret == 1) return; connection = rcm_remove_connection_from_list_by_name (connection-> Name, ConnectionsSList); if (connection) free (connection); rcm_update_main_window (); // causing assertion rcm_save_connections_to_disk (); }}voidon_help_help_menu_activate (GtkMenuItem * menuitem, gpointer user_data){ GtkWidget *dialog = create_AboutWindow (); gnome_dialog_run_and_close (GNOME_DIALOG (dialog));}voidon_about_activate (GtkMenuItem * menuitem, gpointer user_data){ GtkWidget *AboutWindow = create_AboutWindow (); //gtk_window_set_transient_for (GTK_WINDOW (AboutWindow), // GTK_WINDOW (MainWindow)); //gtk_window_set_modal (GTK_WINDOW (AboutWindow), TRUE); gtk_dialog_run (GTK_DIALOG (AboutWindow)); //gtk_widget_destroy(AboutWindow);}voidon_TbTypesBtn_clicked (GtkButton * button, gpointer user_data){ rcm_show_ConnectionTypesWindow();}voidon_TbConnectionBtn_clicked (GtkButton * button, gpointer user_data){ rcm_show_ConnectionsWindow();}gbooleanon_ConnectionsWindow_delete_event (GtkWidget * widget, GdkEvent * event, gpointer user_data){ GtkWidget *yes_no_dialog; gint ret; gint width, height; GConfClient *gconf_client = NULL; gconf_client = gconf_client_get_default (); gtk_window_get_size (GTK_WINDOW (ConnectionsWindow), &width, &height); gconf_client_set_int (gconf_client, GCONF_CONNECTIONS_WINDOW_WIDTH, width, NULL); gconf_client_set_int (gconf_client, GCONF_CONNECTIONS_WINDOW_HEIGHT, height, NULL); gconf_client_suggest_sync (gconf_client, NULL); g_object_unref (gconf_client); if (ConnectionsSListIsDirty) { yes_no_dialog = gnome_message_box_new (_("Do you want to save your changes?"), GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES, GNOME_STOCK_BUTTON_NO, NULL); ret = gnome_dialog_run (GNOME_DIALOG (yes_no_dialog)); switch (ret) { case 0: { if (!rcm_save_connections_to_disk ()) rcm_error (_("There was a problem saving."), ConnectionsWindow); gtk_widget_hide (ConnectionsWindow); return; } case 1: { if (!rcm_load_connections_from_disk ()) rcm_error (_("A serious error has occured."), ConnectionsWindow); rcm_update_connections_window_list (); gtk_widget_hide (GTK_WIDGET (ConnectionsWindow)); return; } } } rcm_update_main_window (); gtk_widget_hide (GTK_WIDGET (ConnectionsWindow)); return TRUE;}gbooleanon_ConnectionTypesWindow_delete_event (GtkWidget * widget, GdkEvent * event, gpointer user_data){ GtkWidget *yes_no_dialog; gint ret; gint width, height; GConfClient *gconf_client = NULL; gconf_client = gconf_client_get_default (); gtk_window_get_size (GTK_WINDOW (ConnectionTypesWindow), &width, &height); gconf_client_set_int (gconf_client, GCONF_CONNECTION_TYPES_WINDOW_WIDTH, width, NULL); gconf_client_set_int (gconf_client, GCONF_CONNECTION_TYPES_WINDOW_HEIGHT, height, NULL); gconf_client_suggest_sync (gconf_client, NULL); g_object_unref (gconf_client); if (ConnectionTypesSListIsDirty) { yes_no_dialog = gnome_message_box_new (_("Do you want to save your changes?"), GNOME_MESSAGE_BOX_QUESTION, GNOME_STOCK_BUTTON_YES, GNOME_STOCK_BUTTON_NO, NULL); ret = gnome_dialog_run (GNOME_DIALOG (yes_no_dialog)); switch (ret) { case 0: { if (!rcm_save_types_to_disk ()) rcm_error (_("There was a problem saving."), ConnectionTypesWindow); gtk_widget_hide (ConnectionTypesWindow); return; } case 1: { if (!rcm_load_types_from_disk ()) rcm_error (_("A serious error has occured."), ConnectionTypesWindow); rcm_update_connectiontypes_window_list (); gtk_widget_hide (ConnectionTypesWindow); return; } } } rcm_update_main_window (); gtk_widget_hide (GTK_WIDGET (ConnectionTypesWindow)); return TRUE;}voidon_ConnectionTypesClearBtn_clicked (GtkButton * button, gpointer user_data){ rcm_clear_types_window ();}voidon_ConnectionTypesSaveBtn_clicked (GtkButton * button, gpointer user_data){ GtkWidget *widget = NULL; gchar *name = NULL; gchar *command = NULL; gchar* arguments = NULL; gboolean terminal = FALSE; gchar *icon = NULL; ConnectionType type; widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesNameEntry"); g_return_if_fail (widget != NULL); name = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1); if (strnlen (name,NAMELEN) == 0) { g_free (name); rcm_warn (_("Conenction Type name is not set."), ConnectionTypesWindow); return; } strncpy (type.Name, name, NAMELEN); // need this below g_free (name); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesCommandEntry"); g_return_if_fail (widget != NULL); command = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1); if (strnlen (command,COMMANDLEN) == 0) { g_free (command); rcm_warn (_("Conenction Type command is not set."), ConnectionTypesWindow); return; } strncpy (type.Command, command, COMMANDLEN); g_free (command); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesArgumentsEntry"); g_return_if_fail (widget != NULL); arguments = gtk_editable_get_chars (GTK_EDITABLE (widget), 0, -1); if (strnlen (arguments,ARGUMENTSLEN) == 0) strncpy (type.Arguments, "", ARGUMENTSLEN); else strncpy (type.Arguments, arguments, ARGUMENTSLEN); g_free (arguments); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesTerminalChkBox"); g_return_if_fail (widget != NULL); type.Terminal = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesIconEntry"); g_return_if_fail (widget != NULL); icon = gnome_icon_entry_get_filename (GNOME_ICON_ENTRY (widget)); if (icon == NULL) { type.Icon[0] = '\0'; } else { strncpy (type.Icon, icon, ICONLEN); g_free (icon); } rcm_save_type (type); rcm_update_connectiontypes_window_list (); rcm_select_type_by_name (name); rcm_clear_types_window (); rcm_update_main_window(); g_free (name);}voidon_ConnectionTypesOkBtn_clicked (GtkButton * button, gpointer user_data){ gint width, height; GConfClient *gconf_client = NULL; gconf_client = gconf_client_get_default (); gtk_window_get_size (GTK_WINDOW (ConnectionTypesWindow), &width, &height); gconf_client_set_int (gconf_client, GCONF_CONNECTION_TYPES_WINDOW_WIDTH, width, NULL); gconf_client_set_int (gconf_client, GCONF_CONNECTION_TYPES_WINDOW_HEIGHT, height, NULL); gconf_client_suggest_sync (gconf_client, NULL); g_object_unref (gconf_client); if (!rcm_save_types_to_disk ()) rcm_error (_("There was a problem saving."), ConnectionTypesWindow); rcm_update_main_window (); gtk_widget_hide (ConnectionTypesWindow);}voidon_ConnectionTypesCancelBtn_clicked (GtkButton * button, gpointer user_data){ gint width, height; GConfClient *gconf_client = NULL; gconf_client = gconf_client_get_default (); gtk_window_get_size (GTK_WINDOW (ConnectionTypesWindow), &width, &height); gconf_client_set_int (gconf_client, GCONF_CONNECTION_TYPES_WINDOW_WIDTH, width, NULL); gconf_client_set_int (gconf_client, GCONF_CONNECTION_TYPES_WINDOW_HEIGHT, height, NULL); gconf_client_suggest_sync (gconf_client, NULL); g_object_unref (gconf_client); if (!rcm_load_types_from_disk ()) rcm_error (_("A serious error has occured."), ConnectionTypesWindow); rcm_update_main_window (); gtk_widget_hide (ConnectionTypesWindow);}voidon_ConnectionTypesDeleteBtn_clicked (GtkButton * button, gpointer user_data){ GtkWidget *widget; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *select; gchar *name; GtkWidget *ConnectionTypesList = lookup_widget (ConnectionTypesWindow, "ConnectionTypesList"); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ConnectionTypesList)); if (gtk_tree_selection_get_selected (select, &model, &iter)) { gtk_tree_model_get (model, &iter, CONNECTION_TYPE_NAME_COLUMN, &name, -1); rcm_remove_type_from_list_by_name (name, ConnectionTypesSList); rcm_update_connectiontypes_window_list (); rcm_clear_types_window (); } else { rcm_warn (_("You must select a type from the list first."), ConnectionTypesWindow); }}voidon_ConnectionsList_selection_changed_cb (GtkTreeSelection * selection, gpointer data){ GtkWidget *widget; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *select; gchar *name; Connection *connection; ConnectionType *type; GtkWidget *ConnectionsList = lookup_widget (ConnectionsWindow, "ConnectionsList"); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ConnectionsList)); if (gtk_tree_selection_get_selected (select, &model, &iter)) { gtk_tree_model_get (model, &iter, CONNECTION_NAME_COLUMN, &name, -1); connection = rcm_find_connection_by_name_in_list (name, ConnectionsSList); g_return_if_fail (connection != NULL); widget = lookup_widget (ConnectionsWindow, "ConnectionNameEntry"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (widget), connection->Name); widget = NULL; widget = lookup_widget (ConnectionsWindow, "ConnectionHostnameEntry"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (widget), connection->Hostname); type = g_slist_nth_data (ConnectionTypesSList, connection->Type); widget = NULL; widget = lookup_widget (ConnectionsWindow, "ConnectionTypeCombo"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (widget)->entry), type->Name); widget = NULL; widget = lookup_widget (ConnectionsWindow, "ConnectionUsernameEntry"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (widget), connection->Username); widget = NULL; widget = lookup_widget (ConnectionsWindow, "ConnectionArgumentsEntry"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (widget), connection->Arguments); }}voidon_ConnectionTypesList_selection_changed_cb (GtkTreeSelection * selection, gpointer data){ GtkWidget *widget; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *select; gchar *name; ConnectionType *type; GtkWidget *ConnectionTypesList = lookup_widget (ConnectionTypesWindow, "ConnectionTypesList"); select = gtk_tree_view_get_selection (GTK_TREE_VIEW (ConnectionTypesList)); if (gtk_tree_selection_get_selected (select, &model, &iter)) { gtk_tree_model_get (model, &iter, CONNECTION_TYPE_NAME_COLUMN, &name, -1); type = rcm_find_type_by_name_in_list (name, ConnectionTypesSList); g_return_if_fail (type != NULL); widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesNameEntry"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (widget), type->Name); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesCommandEntry"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (widget), type->Command); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesArgumentsEntry"); g_return_if_fail (widget != NULL); gtk_entry_set_text (GTK_ENTRY (widget), type->Arguments); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesTerminalChkBox"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), type->Terminal); widget = NULL; widget = lookup_widget (ConnectionTypesWindow, "ConnectionTypesIconEntry"); g_return_if_fail (widget != NULL); gnome_icon_entry_set_filename (GNOME_ICON_ENTRY (widget), type->Icon); }}gbooleanon_MainWindow_delete_event (GtkWidget * widget, GdkEvent * event, gpointer user_data){ rcm_quit (); return FALSE;}voidon_file_new_connection_activate (GtkMenuItem * menuitem, gpointer user_data){ rcm_show_ConnectionsWindow();}voidon_edit_preferences_activate (GtkMenuItem * menuitem, gpointer user_data){ GtkWidget* ascchk; GtkWidget* deschk; GtkWidget* typchk; GtkWidget* nonchk; GtkWidget* terminal; GtkWidget* arguments; GtkWidget* usernames; ascchk = lookup_widget(PropertiesDialog,"PropertyAscendingSort"); deschk = lookup_widget(PropertiesDialog,"PropertyDescendingSort"); typchk = lookup_widget(PropertiesDialog,"PropertyTypeSort"); nonchk = lookup_widget(PropertiesDialog,"PropertyNoneSort"); terminal = lookup_widget(PropertiesDialog,"PropertyTerminalEntry"); arguments = lookup_widget(PropertiesDialog,"PropertyTerminalArgumentsEntry"); usernames = lookup_widget(PropertiesDialog,"PropertyShowUserNames"); g_return_if_fail(ascchk != NULL || deschk != NULL || typchk != NULL || nonchk != NULL || arguments != NULL || arguments != NULL); if(SortOption == SORT_ASCENDING) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ascchk),TRUE); else if(SortOption == SORT_DESCENDING) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(deschk),TRUE); else if(SortOption == SORT_TYPE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(typchk),TRUE); else if(SortOption == SORT_NONE) gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(nonchk),TRUE); gtk_entry_set_text(GTK_ENTRY(terminal),TerminalProgram); gtk_entry_set_text(GTK_ENTRY(arguments),TerminalProgramOptions); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(usernames),DisplayUsernameInMainWindow); gtk_widget_show(PropertiesDialog);}voidon_edit_properties_activate (GtkMenuItem * menuitem, gpointer user_data){ GnomeIconList *icon_list; gint i; GList *l;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -