1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) James Liggett 2007 <jrliggett@cox.net>
6 * Portions based on the original Subversion plugin
7 * Copyright (C) Johannes Schmid 2005
9 * anjuta is free software.
11 * You may redistribute it and/or modify it under the terms of the
12 * GNU General Public License, as published by the Free Software
13 * Foundation; either version 2 of the License, or (at your option)
16 * anjuta is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 * See the GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with anjuta. If not, write to:
23 * The Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor
25 * Boston, MA 02110-1301, USA.
28 #include "subversion-commit-dialog.h"
31 on_commit_command_finished (AnjutaCommand
*command
, guint return_code
,
36 status
= anjuta_shell_get_status (ANJUTA_PLUGIN (plugin
)->shell
,
39 anjuta_status (status
, _("Subversion: Commit complete."), 5);
41 report_errors (command
, return_code
);
43 svn_commit_command_destroy (SVN_COMMIT_COMMAND (command
));
47 on_subversion_commit_response(GtkDialog
* dialog
, gint response
,
57 GtkWidget
*commit_status_view
;
58 GList
*selected_paths
;
59 SvnCommitCommand
*commit_command
;
62 logtext
= glade_xml_get_widget(data
->gxml
, "subversion_log_view");
63 log
= get_log_from_textview(logtext
);
64 if (!g_utf8_strlen(log
, -1))
67 GtkWidget
* dlg
= gtk_message_dialog_new(GTK_WINDOW(dialog
),
68 GTK_DIALOG_DESTROY_WITH_PARENT
, GTK_MESSAGE_INFO
,
70 _("Are you sure that you want to pass an empty log message?"));
71 result
= gtk_dialog_run(GTK_DIALOG(dlg
));
72 gtk_widget_destroy(dlg
);
73 if (result
== GTK_RESPONSE_NO
)
77 norecurse
= glade_xml_get_widget(data
->gxml
, "subversion_norecurse");
79 commit_status_view
= glade_xml_get_widget (data
->gxml
,
80 "commit_status_view");
82 selected_paths
= anjuta_vcs_status_tree_view_get_selected (ANJUTA_VCS_STATUS_TREE_VIEW (commit_status_view
));
84 commit_command
= svn_commit_command_new (selected_paths
,
86 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(norecurse
)));
88 svn_command_free_path_list (selected_paths
);
90 create_message_view (data
->plugin
);
92 pulse_timer_id
= status_bar_progress_pulse (data
->plugin
,
98 g_signal_connect (G_OBJECT (commit_command
), "command-finished",
99 G_CALLBACK (stop_status_bar_progress_pulse
),
100 GUINT_TO_POINTER (pulse_timer_id
));
102 g_signal_connect (G_OBJECT (commit_command
), "command-finished",
103 G_CALLBACK (on_commit_command_finished
),
106 g_signal_connect (G_OBJECT (commit_command
), "data-arrived",
107 G_CALLBACK (on_command_info_arrived
),
110 anjuta_command_start (ANJUTA_COMMAND (commit_command
));
112 subversion_data_free(data
);
113 gtk_widget_destroy (GTK_WIDGET(dialog
));
118 subversion_data_free(data
);
119 gtk_widget_destroy(GTK_WIDGET(dialog
));
126 select_all_files (AnjutaCommand
*command
, guint return_code
,
127 AnjutaVcsStatusTreeView
*status_view
)
129 anjuta_vcs_status_tree_view_select_all (status_view
);
133 subversion_commit_dialog (GtkAction
* action
, Subversion
* plugin
,
138 GtkWidget
*commit_select_all_button
;
139 GtkWidget
*commit_clear_button
;
140 GtkWidget
*commit_status_view
;
141 GtkWidget
*commit_status_progress_bar
;
142 SvnStatusCommand
*status_command
;
143 SubversionData
* data
;
145 gxml
= glade_xml_new(GLADE_FILE
, "subversion_commit", NULL
);
147 dialog
= glade_xml_get_widget(gxml
, "subversion_commit");
148 commit_select_all_button
= glade_xml_get_widget (gxml
,
149 "commit_select_all_button");
150 commit_clear_button
= glade_xml_get_widget (gxml
,
151 "commit_clear_button");
152 commit_status_view
= glade_xml_get_widget (gxml
, "commit_status_view");
153 commit_status_progress_bar
= glade_xml_get_widget (gxml
,
154 "commit_status_progress_bar");
156 status_command
= svn_status_command_new (plugin
->project_root_dir
,
159 g_signal_connect (G_OBJECT (commit_select_all_button
), "clicked",
160 G_CALLBACK (select_all_status_items
),
163 g_signal_connect (G_OBJECT (commit_clear_button
), "clicked",
164 G_CALLBACK (clear_all_status_selections
),
167 g_signal_connect (G_OBJECT (status_command
), "command-finished",
168 G_CALLBACK (select_all_files
),
171 pulse_progress_bar (GTK_PROGRESS_BAR (commit_status_progress_bar
));
173 g_signal_connect (G_OBJECT (status_command
), "command-finished",
174 G_CALLBACK (cancel_data_arrived_signal_disconnect
),
177 g_signal_connect (G_OBJECT (status_command
), "command-finished",
178 G_CALLBACK (hide_pulse_progress_bar
),
179 commit_status_progress_bar
);
181 g_signal_connect (G_OBJECT (status_command
), "command-finished",
182 G_CALLBACK (on_status_command_finished
),
185 g_signal_connect (G_OBJECT (status_command
), "data-arrived",
186 G_CALLBACK (on_status_command_data_arrived
),
189 g_object_weak_ref (G_OBJECT (commit_status_view
),
190 (GWeakNotify
) disconnect_data_arrived_signals
,
193 anjuta_command_start (ANJUTA_COMMAND (status_command
));
195 data
= subversion_data_new(plugin
, gxml
);
196 g_signal_connect(G_OBJECT(dialog
), "response",
197 G_CALLBACK(on_subversion_commit_response
), data
);
199 gtk_widget_show_all (dialog
);
204 on_menu_subversion_commit (GtkAction
* action
, Subversion
* plugin
)
206 subversion_commit_dialog(action
, plugin
, plugin
->current_editor_filename
);
210 on_fm_subversion_commit (GtkAction
* action
, Subversion
* plugin
)
212 subversion_commit_dialog(action
, plugin
, plugin
->fm_current_filename
);