static void insert_cb (GtkButton *button, GtkWidget *window) { GtkGrid *g, *g1, *g2, *g3, *g4; GtkWidget *child; gboolean inserted; g = GTK_GRID (gtk_bin_get_child (GTK_BIN (window))); g1 = GTK_GRID (gtk_grid_get_child_at (g, 0, 0)); g2 = GTK_GRID (gtk_grid_get_child_at (g, 1, 0)); g3 = GTK_GRID (gtk_grid_get_child_at (g, 0, 1)); g4 = GTK_GRID (gtk_grid_get_child_at (g, 1, 1)); inserted = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (button), "inserted")); if (inserted) { gtk_grid_remove_row (g1, 1); gtk_grid_remove_column (g2, 1); gtk_grid_remove_row (g3, 1); gtk_grid_remove_column (g4, 1); } else { gtk_grid_insert_row (g1, 1); gtk_grid_attach (g1, test_widget ("(0, 1)", "red"), 0, 1, 1, 1); gtk_grid_attach (g1, test_widget ("(2, 1)", "red"), 2, 1, 1, 1); gtk_grid_insert_column (g2, 1); gtk_grid_attach (g2, test_widget ("(1, 0)", "red"), 1, 0, 1, 1); gtk_grid_attach (g2, test_widget ("(1, 2)", "red"), 1, 2, 1, 1); child = gtk_grid_get_child_at (g3, 0, 0); gtk_grid_insert_next_to (g3, child, GTK_POS_BOTTOM); gtk_grid_attach (g3, test_widget ("(0, 1)", "red"), 0, 1, 1, 1); gtk_grid_attach (g3, test_widget ("(2, 1)", "red"), 2, 1, 1, 1); child = gtk_grid_get_child_at (g4, 0, 0); gtk_grid_insert_next_to (g4, child, GTK_POS_RIGHT); gtk_grid_attach (g4, test_widget ("(1, 0)", "red"), 1, 0, 1, 1); gtk_grid_attach (g4, test_widget ("(1, 2)", "red"), 1, 2, 1, 1); gtk_widget_show_all (GTK_WIDGET (g)); } gtk_button_set_label (button, inserted ? "Insert" : "Remove"); g_object_set_data (G_OBJECT (button), "inserted", GINT_TO_POINTER (!inserted)); }
void window_del_widget(struct window *w, GtkWidget *widget) { int i; if (!w->toplevel) return; for (i = 0; i < w->grid_height; i++) { GtkWidget *current = gtk_grid_get_child_at(GTK_GRID(w->grid), WIDGET_COLUMN, i); if (current == widget) { gtk_grid_remove_row(GTK_GRID(w->grid), i); w->grid_height--; return; } } }
void view_leave(struct dt_lib_module_t *self,struct dt_view_t *old_view,struct dt_view_t *new_view) { dt_lib_camera_t *lib = self->data; // remove listener from camera control.. dt_camctl_tether_mode(darktable.camctl, NULL, FALSE); dt_camctl_unregister_listener(darktable.camctl, lib->data.listener); gtk_widget_destroy(GTK_WIDGET(lib->gui.properties_menu)); lib->gui.properties_menu = NULL; // remove all properties while(lib->gui.prop_end > lib->gui.prop_start +1) { gtk_grid_remove_row(lib->gui.main_grid,lib->gui.prop_start +1); lib->gui.rows--; lib->gui.prop_end--; } // no need to free widgets, they are freed when the line of the grid is destroyed g_list_free_full(lib->gui.properties,_lib_property_free); lib->gui.properties = NULL; }