diff options
-rw-r--r-- | rcm-client-receive.c | 88 |
1 files changed, 76 insertions, 12 deletions
diff --git a/rcm-client-receive.c b/rcm-client-receive.c index e1969b2..5ae1af3 100644 --- a/rcm-client-receive.c +++ b/rcm-client-receive.c @@ -418,27 +418,92 @@ remove_header_buttons(void) remote->header_buttons = NULL; } +static void toggle_edit_keymap(GtkButton *button, gpointer user_data); + static void -edit_keymap(GtkButton *button, gpointer user_data) +resize_keymap(GtkButton *button, gpointer user_data) { - //struct remote *remote = user_data; + GtkWindow *parent = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(button))); + GtkWidget *dialog; + GtkWidget *content_area; + GtkWidget *grid; + GtkWidget *width_label; + GtkAdjustment *width_adj; + GtkWidget *width_input; + GtkWidget *height_label; + GtkAdjustment *height_adj; + GtkWidget *height_input; + gint r; + gint width; + gint height; + + dialog = gtk_dialog_new_with_buttons("Resize Keymap", parent, + GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, + "OK", GTK_RESPONSE_ACCEPT, + "Cancel", GTK_RESPONSE_REJECT, + NULL); + + grid = gtk_grid_new(); + gtk_grid_set_column_spacing(GTK_GRID(grid), 12); + gtk_grid_set_row_spacing(GTK_GRID(grid), 12); + gtk_container_set_border_width(GTK_CONTAINER(grid), 12); + + width_label = gtk_label_new("Width:"); + gtk_widget_set_halign(width_label, GTK_ALIGN_END); + width_adj = gtk_adjustment_new(remote->width, 1.0, 100.0, 1.0, 5.0, 0.0); + width_input = gtk_spin_button_new(width_adj, 1.0, 0); + gtk_grid_attach(GTK_GRID(grid), width_label, 1, 1, 1, 1); + gtk_grid_attach(GTK_GRID(grid), width_input, 2, 1, 1, 1); + + height_label = gtk_label_new("Height:"); + gtk_widget_set_halign(height_label, GTK_ALIGN_END); + height_adj = gtk_adjustment_new(remote->height, 1.0, 100.0, 1.0, 5.0, 0.0); + height_input = gtk_spin_button_new(height_adj, 1.0, 0); + gtk_grid_attach(GTK_GRID(grid), height_label, 1, 2, 1, 1); + gtk_grid_attach(GTK_GRID(grid), height_input, 2, 2, 1, 1); + + content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + gtk_container_set_border_width(GTK_CONTAINER(content_area), 12); + gtk_container_add(GTK_CONTAINER(content_area), grid); + gtk_widget_show_all(dialog); + + r = gtk_dialog_run(GTK_DIALOG(dialog)); + if (r != GTK_RESPONSE_ACCEPT) + goto out; - g_print("Button clicked\n"); - g_print("Remote width: %u x %u\n", remote->width, remote->height); + width = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(width_input)); + height = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(height_input)); + printf("Asked to resize keylayout to %ix%i\n", width, height); + +out: + gtk_widget_destroy(dialog); +} + +static void +set_edit_keymap(bool editing) +{ if (remote->width < 1 || remote->height < 1) return; remove_header_buttons(); - if (!remote->editing) - create_header_button("Done Editing Keymap", "gtk-apply", G_CALLBACK(edit_keymap), &remote); - else - create_header_button("Edit Keymap", "list-add", G_CALLBACK(edit_keymap), &remote); - remote->editing = !remote->editing; + if (editing) { + create_header_button("Apply", "gtk-apply", G_CALLBACK(toggle_edit_keymap), &remote); + create_header_button("Resize", "document-page-setup", G_CALLBACK(resize_keymap), &remote); + } else + create_header_button("Edit", "list-add", G_CALLBACK(toggle_edit_keymap), &remote); + gtk_widget_queue_draw(da); } static void +toggle_edit_keymap(GtkButton *button, gpointer user_data) +{ + remote->editing = !remote->editing; + set_edit_keymap(remote->editing); +} + +static void on_notebook_page_change(GtkNotebook *notebook, GtkWidget *page, guint new_page_num, gpointer user_data) { @@ -448,9 +513,8 @@ on_notebook_page_change(GtkNotebook *notebook, GtkWidget *page, guint new_page_n return; } - /* FIXME: call edit_keymap() instead */ - create_header_button("Edit Keymap", "list-add", G_CALLBACK(edit_keymap), &remote); - + remote->editing = false; + set_edit_keymap(remote->editing); g_print("Page change: %i -> %u\n", own_page_num, new_page_num); } |