Changeset 08eae59d49170034303842da09846cc88a3216fe
- Timestamp:
- 07/03/08 10:56:02 (5 years ago)
- Author:
- Armin Burgmeier <armin@…>
- Parents:
- da3e3a0201b8e4eb8cc106101386ca2e7234c06e
- Children:
- 77f22cf1f41f0254633ba54553333e8ab1d75823
- git-committer:
- Armin Burgmeier <armin@arbur.net> / 2008-07-03T10:56:02Z+0200
- Message:
-
Added Cut/Copy/Paste functionality
2008-07-03 Armin Burgmeier <armin@…>
- inc/commands/edit-commands.hpp:
- src/commands/edit-commands.cpp: Implemented Cut/Copy/Paste
functionality.
- src/core/folder.cpp: Emit signal_document_changed when the last
document is about to be removed before the document has actually been
removed, so that signal handlers that still have a reference to the
last document can still make use of it.
- src/core/header.cpp: Added a shortcut (<control><stift>L) for Save
All, as in gedit.
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
rda3e3a0
|
r08eae59
|
|
| | 1 | 2008-07-03 Armin Burgmeier <armin@0x539.de> |
| | 2 | |
| | 3 | * inc/commands/edit-commands.hpp: |
| | 4 | * src/commands/edit-commands.cpp: Implemented Cut/Copy/Paste |
| | 5 | functionality. |
| | 6 | |
| | 7 | * src/core/folder.cpp: Emit signal_document_changed when the last |
| | 8 | document is about to be removed before the document has actually been |
| | 9 | removed, so that signal handlers that still have a reference to the |
| | 10 | last document can still make use of it. |
| | 11 | |
| | 12 | * src/core/header.cpp: Added a shortcut (<control><stift>L) for Save |
| | 13 | All, as in gedit. |
| | 14 | |
| 1 | 15 | 2008-07-02 Armin Burgmeier <armin@0x539.de> |
| 2 | 16 | |
-
|
rda3e3a0
|
r08eae59
|
|
| 67 | 67 | } |
| 68 | 68 | |
| | 69 | static void on_mark_set_static(GtkTextBuffer* buffer, |
| | 70 | GtkTextIter* iter, |
| | 71 | GtkTextMark* mark, |
| | 72 | gpointer user_data) |
| | 73 | { |
| | 74 | static_cast<EditCommands*>(user_data)->on_mark_set(); |
| | 75 | } |
| | 76 | |
| | 77 | static void on_changed_static(GtkTextBuffer* buffer, |
| | 78 | gpointer user_data) |
| | 79 | { |
| | 80 | static_cast<EditCommands*>(user_data)->on_changed(); |
| | 81 | } |
| | 82 | |
| 69 | 83 | void on_sync_complete(); |
| 70 | 84 | void on_active_user_changed(InfTextUser* active_user); |
| | 85 | void on_mark_set(); |
| | 86 | void on_changed(); |
| | 87 | |
| 71 | 88 | void on_can_undo_changed(InfAdoptedUser* user, bool can_undo); |
| 72 | 89 | void on_can_redo_changed(InfAdoptedUser* user, bool can_redo); |
| … |
… |
|
| 74 | 91 | void on_undo(); |
| 75 | 92 | void on_redo(); |
| | 93 | void on_cut(); |
| | 94 | void on_copy(); |
| | 95 | void on_paste(); |
| 76 | 96 | |
| 77 | 97 | DocWindow* m_current_document; |
| … |
… |
|
| 81 | 101 | gulong m_can_redo_changed_handler; |
| 82 | 102 | gulong m_synchronization_complete_handler; |
| | 103 | gulong m_mark_set_handler; |
| | 104 | gulong m_changed_handler; |
| 83 | 105 | |
| 84 | 106 | Gtk::Window& m_parent; |
-
|
rda3e3a0
|
r08eae59
|
|
| 34 | 34 | m_header.action_edit_redo->signal_activate().connect( |
| 35 | 35 | sigc::mem_fun(*this, &EditCommands::on_redo)); |
| | 36 | m_header.action_edit_cut->signal_activate().connect( |
| | 37 | sigc::mem_fun(*this, &EditCommands::on_cut)); |
| | 38 | m_header.action_edit_copy->signal_activate().connect( |
| | 39 | sigc::mem_fun(*this, &EditCommands::on_copy)); |
| | 40 | m_header.action_edit_paste->signal_activate().connect( |
| | 41 | sigc::mem_fun(*this, &EditCommands::on_paste)); |
| 36 | 42 | m_folder.signal_document_changed().connect( |
| 37 | 43 | sigc::mem_fun(*this, &EditCommands::on_document_changed)); |
| … |
… |
|
| 55 | 61 | inf_adopted_session_get_algorithm( |
| 56 | 62 | INF_ADOPTED_SESSION(session)); |
| | 63 | GtkTextBuffer* buffer = GTK_TEXT_BUFFER( |
| | 64 | m_current_document->get_text_buffer()); |
| 57 | 65 | |
| 58 | 66 | if(m_synchronization_complete_handler != 0) |
| … |
… |
|
| 72 | 80 | } |
| 73 | 81 | |
| | 82 | g_signal_handler_disconnect(G_OBJECT(buffer), |
| | 83 | m_mark_set_handler); |
| | 84 | g_signal_handler_disconnect(G_OBJECT(buffer), |
| | 85 | m_changed_handler); |
| | 86 | |
| 74 | 87 | m_active_user_changed_connection.disconnect(); |
| 75 | 88 | } |
| … |
… |
|
| 81 | 94 | InfTextSession* session = document->get_session(); |
| 82 | 95 | InfTextUser* active_user = document->get_active_user(); |
| | 96 | GtkTextBuffer* buffer = |
| | 97 | GTK_TEXT_BUFFER(document->get_text_buffer()); |
| 83 | 98 | |
| 84 | 99 | m_active_user_changed_connection = |
| … |
… |
|
| 88 | 103 | &EditCommands:: |
| 89 | 104 | on_active_user_changed)); |
| | 105 | |
| | 106 | m_mark_set_handler = g_signal_connect_after( |
| | 107 | G_OBJECT(buffer), "mark-set", |
| | 108 | G_CALLBACK(&on_mark_set_static), this); |
| | 109 | // The selection might change without mark-set being emitted |
| | 110 | // when the document changes, for example when all |
| | 111 | // currently selected text is deleted. |
| | 112 | m_changed_handler = g_signal_connect_after( |
| | 113 | G_OBJECT(buffer), "changed", |
| | 114 | G_CALLBACK(&on_changed_static), this); |
| 90 | 115 | |
| 91 | 116 | if(inf_session_get_status(INF_SESSION(session)) == |
| … |
… |
|
| 116 | 141 | // Set initial sensitivity for active user: |
| 117 | 142 | on_active_user_changed(active_user); |
| | 143 | // Set initial sensitivity for cut/copy/paste: |
| | 144 | on_mark_set(); |
| 118 | 145 | } |
| 119 | 146 | else |
| … |
… |
|
| 121 | 148 | m_header.action_edit_undo->set_sensitive(false); |
| 122 | 149 | m_header.action_edit_redo->set_sensitive(false); |
| | 150 | m_header.action_edit_cut->set_sensitive(false); |
| | 151 | m_header.action_edit_copy->set_sensitive(false); |
| | 152 | m_header.action_edit_paste->set_sensitive(false); |
| 123 | 153 | } |
| 124 | 154 | } |
| … |
… |
|
| 152 | 182 | { |
| 153 | 183 | g_assert(m_current_document != NULL); |
| 154 | | InfTextSession* session = m_current_document->get_session(); |
| 155 | | InfAdoptedAlgorithm* algorithm = inf_adopted_session_get_algorithm( |
| 156 | | INF_ADOPTED_SESSION(session)); |
| 157 | 184 | |
| 158 | 185 | if(active_user != NULL) |
| 159 | 186 | { |
| | 187 | InfTextSession* session = m_current_document->get_session(); |
| | 188 | InfAdoptedAlgorithm* algorithm = |
| | 189 | inf_adopted_session_get_algorithm( |
| | 190 | INF_ADOPTED_SESSION(session)); |
| | 191 | GtkTextBuffer* buffer = GTK_TEXT_BUFFER( |
| | 192 | m_current_document->get_text_buffer()); |
| | 193 | |
| 160 | 194 | m_header.action_edit_undo->set_sensitive( |
| 161 | 195 | inf_adopted_algorithm_can_undo( |
| … |
… |
|
| 164 | 198 | inf_adopted_algorithm_can_redo( |
| 165 | 199 | algorithm, INF_ADOPTED_USER(active_user))); |
| | 200 | |
| | 201 | m_header.action_edit_cut->set_sensitive( |
| | 202 | gtk_text_buffer_get_has_selection(buffer)); |
| | 203 | m_header.action_edit_paste->set_sensitive(true); |
| 166 | 204 | } |
| 167 | 205 | else |
| … |
… |
|
| 169 | 207 | m_header.action_edit_undo->set_sensitive(false); |
| 170 | 208 | m_header.action_edit_redo->set_sensitive(false); |
| 171 | | } |
| | 209 | m_header.action_edit_cut->set_sensitive(false); |
| | 210 | m_header.action_edit_paste->set_sensitive(false); |
| | 211 | } |
| | 212 | } |
| | 213 | |
| | 214 | void Gobby::EditCommands::on_mark_set() |
| | 215 | { |
| | 216 | g_assert(m_current_document != NULL); |
| | 217 | GtkTextBuffer* buffer = |
| | 218 | GTK_TEXT_BUFFER(m_current_document->get_text_buffer()); |
| | 219 | |
| | 220 | m_header.action_edit_copy->set_sensitive( |
| | 221 | gtk_text_buffer_get_has_selection(buffer)); |
| | 222 | |
| | 223 | if(m_current_document->get_active_user() != NULL) |
| | 224 | { |
| | 225 | m_header.action_edit_cut->set_sensitive( |
| | 226 | gtk_text_buffer_get_has_selection(buffer)); |
| | 227 | } |
| | 228 | } |
| | 229 | |
| | 230 | void Gobby::EditCommands::on_changed() |
| | 231 | { |
| | 232 | on_mark_set(); |
| 172 | 233 | } |
| 173 | 234 | |
| … |
… |
|
| 207 | 268 | ); |
| 208 | 269 | } |
| | 270 | |
| | 271 | void Gobby::EditCommands::on_cut() |
| | 272 | { |
| | 273 | g_assert(m_current_document != NULL); |
| | 274 | g_assert(m_current_document->get_active_user() != NULL); |
| | 275 | |
| | 276 | gtk_text_buffer_cut_clipboard( |
| | 277 | GTK_TEXT_BUFFER(m_current_document->get_text_buffer()), |
| | 278 | gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), |
| | 279 | TRUE); |
| | 280 | } |
| | 281 | |
| | 282 | void Gobby::EditCommands::on_copy() |
| | 283 | { |
| | 284 | g_assert(m_current_document != NULL); |
| | 285 | |
| | 286 | gtk_text_buffer_copy_clipboard( |
| | 287 | GTK_TEXT_BUFFER(m_current_document->get_text_buffer()), |
| | 288 | gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); |
| | 289 | } |
| | 290 | |
| | 291 | void Gobby::EditCommands::on_paste() |
| | 292 | { |
| | 293 | g_assert(m_current_document != NULL); |
| | 294 | g_assert(m_current_document->get_active_user() != NULL); |
| | 295 | |
| | 296 | gtk_text_buffer_paste_clipboard( |
| | 297 | GTK_TEXT_BUFFER(m_current_document->get_text_buffer()), |
| | 298 | gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), |
| | 299 | NULL, TRUE); |
| | 300 | } |
-
|
r93f6a42
|
r08eae59
|
|
| 132 | 132 | gpointer data) |
| 133 | 133 | { |
| 134 | | printf("Notify subscr group\n"); |
| 135 | 134 | static_cast<TabLabel*>(data)->update_icon(); |
| 136 | 135 | } |
| … |
… |
|
| 228 | 227 | { |
| 229 | 228 | m_signal_document_removed.emit(window); |
| | 229 | |
| | 230 | // TODO: We should actually remove the page here, but destroy the |
| | 231 | // DocWindow after having emitted signal_document_changed. |
| | 232 | if(get_n_pages() == 1) |
| | 233 | m_signal_document_changed.emit(NULL); |
| | 234 | |
| 230 | 235 | inf_session_close(INF_SESSION(window.get_session())); |
| 231 | 236 | remove_page(window); |
| 232 | | |
| 233 | | if(get_n_pages() == 0) |
| 234 | | m_signal_document_changed.emit(NULL); |
| 235 | 237 | } |
| 236 | 238 | |
-
|
rda3e3a0
|
r08eae59
|
|
| 276 | 276 | Gtk::AccelKey("<control><shift>S", |
| 277 | 277 | "<Actions>/MenuFile/FileSaveAs")); |
| 278 | | group_file->add(action_file_save_all); |
| | 278 | group_file->add(action_file_save_all, |
| | 279 | Gtk::AccelKey("<control><shift>L", |
| | 280 | "<Actions>/MenuFile/FileSaveAll")); |
| 279 | 281 | group_file->add(action_file_quit); |
| 280 | 282 | |