static void preferences_response (MCPrefsDialog *dialog, int id, MCData *mc) { switch (id) { case GTK_RESPONSE_HELP: show_help_section (GTK_WINDOW (dialog), "command-line-prefs-0"); break; case GTK_RESPONSE_CLOSE: default: { GtkTreeViewColumn *col; dialog = &mc->prefs_dialog; /* A hack to make sure 'edited' on the renderer if we * close the dialog while editing. */ col = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->macros_tree), 0); if (col->editable_widget && GTK_IS_CELL_EDITABLE (col->editable_widget)) gtk_cell_editable_editing_done (col->editable_widget); col = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->macros_tree), 1); if (col->editable_widget && GTK_IS_CELL_EDITABLE (col->editable_widget)) gtk_cell_editable_editing_done (col->editable_widget); gtk_widget_hide (dialog->dialog); } break; } }
static void close_dialog(GtkWidget* button, gpointer data) { PagerData* pager = data; GtkTreeViewColumn* col; #if GTK_CHECK_VERSION (3, 0, 0) GtkCellArea *area; GtkCellEditable *edit_widget; #endif /* This is a hack. The "editable" signal for GtkCellRenderer is emitted only on button press or focus cycle. Hence when the user changes the name and closes the preferences dialog without a button-press he would lose the name changes. So, we call the gtk_cell_editable_editing_done to stop the editing. Thanks to Paolo for a better crack than the one I had. */ col = gtk_tree_view_get_column(GTK_TREE_VIEW(pager->workspaces_tree), 0); #if GTK_CHECK_VERSION (3, 0, 0) area = gtk_cell_layout_get_area (GTK_CELL_LAYOUT (col)); edit_widget = gtk_cell_area_get_edit_widget (area); if (edit_widget) gtk_cell_editable_editing_done (edit_widget); #else if (col->editable_widget != NULL && GTK_IS_CELL_EDITABLE(col->editable_widget)) gtk_cell_editable_editing_done(col->editable_widget); #endif gtk_widget_destroy(pager->properties_dialog); }
//-------------------------------------------------------------------------------- void DbMySQLTableEditorFKPage::cell_editing_started(GtkCellRenderer* cr, GtkCellEditable* ce, gchar* path, gpointer udata) { DbMySQLTableEditorFKPage* self = reinterpret_cast<DbMySQLTableEditorFKPage*>(udata); bec::NodeId node(path); if ( node.is_valid() ) self->_fk_node = node; if ( GTK_IS_ENTRY(ce) ) // Fill in name of the foreign key column { ::bec::FKConstraintListBE *fk_be = self->_be->get_fks(); Gtk::Entry* entry = Glib::wrap(GTK_ENTRY(ce)); std::string name; if (node.back() == fk_be->count()-1) fk_be->set_field(node, bec::FKConstraintListBE::Name, 1); fk_be->get_field(node, bec::FKConstraintListBE::Name, name); entry->set_text(name); } // clean up edit_done signal/slotl if ( self->_ce && self->_edit_conn ) { g_signal_handler_disconnect (self->_ce, self->_edit_conn); self->_ce = 0; self->_edit_conn = 0; } if (GTK_IS_CELL_EDITABLE(ce)) { self->_ce = ce; self->_edit_conn = g_signal_connect(ce, "editing-done", GCallback(&DbMySQLTableEditorFKPage::cell_editing_done), udata); } }
/** * gtk_cell_editable_remove_widget: * @cell_editable: A #GtkTreeEditable * * Emits the "remove_widget" signal. This signal is meant to indicate that the * cell is finished editing, and the widget may now be destroyed. **/ void gtk_cell_editable_remove_widget (GtkCellEditable *cell_editable) { g_return_if_fail (GTK_IS_CELL_EDITABLE (cell_editable)); g_signal_emit_by_name (cell_editable, "remove_widget"); }
/** * gtk_cell_editable_editing_done: * @cell_editable: A #GtkTreeEditable * * Emits the "editing_done" signal. This signal is a sign for the cell renderer * to update its value from the cell. **/ void gtk_cell_editable_editing_done (GtkCellEditable *cell_editable) { g_return_if_fail (GTK_IS_CELL_EDITABLE (cell_editable)); g_signal_emit_by_name (cell_editable, "editing_done"); }
/** * gtk_cell_editable_start_editing: * @cell_editable: A #GtkCellEditable * @event: A #GdkEvent, or %NULL * * Begins editing on a @cell_editable. @event is the #GdkEvent that began the * editing process. It may be %NULL, in the instance that editing was initiated * through programatic means. **/ void gtk_cell_editable_start_editing (GtkCellEditable *cell_editable, GdkEvent *event) { g_return_if_fail (GTK_IS_CELL_EDITABLE (cell_editable)); (* GTK_CELL_EDITABLE_GET_IFACE (cell_editable)->start_editing) (cell_editable, event); }
//-------------------------------------------------------------------------------- void DbMySQLTableEditorIndexPage::cell_editing_started(Gtk::CellEditable *cell, const Glib::ustring &path) { bec::NodeId node(path); if (node.is_valid()) _index_node = node; if (_editing_done_id != 0 && _editable_cell != 0) { g_signal_handler_disconnect(_editable_cell, _editing_done_id); _editing_done_id = 0; _editable_cell = 0; } if (GTK_IS_CELL_EDITABLE(cell->gobj())) { _be->get_indexes()->get_field(node, MySQLTableIndexListBE::Name, _user_index_name); _editable_cell = cell->gobj(); _editing_done_id = g_signal_connect(_editable_cell, "editing-done", GCallback(&DbMySQLTableEditorIndexPage::cell_editing_done_proxy), this); } }
static void close_dialog (GtkWidget *button, gpointer data) { PagerData *pager = data; GtkTreeViewColumn *col; /* This is a hack. The "editable" signal for GtkCellRenderer is emitted only on button press or focus cycle. Hence when the user changes the name and closes the preferences dialog without a button-press he would lose the name changes. So, we call the gtk_cell_editable_editing_done to stop the editing. Thanks to Paolo for a better crack than the one I had. */ col = gtk_tree_view_get_column(GTK_TREE_VIEW (pager->workspaces_tree),0); if (col->editable_widget != NULL && GTK_IS_CELL_EDITABLE (col->editable_widget)) gtk_cell_editable_editing_done(col->editable_widget); gtk_widget_hide (pager->properties_dialog); }