2 * irreco - Ir Remote Control
3 * Copyright (C) 2007 Arto Karppinen (arto.karppinen@iki.fi)
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #include "irreco_cmd_dlg.h"
21 #include "irreco_backend_dlg.h"
22 #include "irreco_backend_instance.h"
25 * irreco_cmd_dlg_run()
27 * Show a dialog where the user can select one command from a list of all
33 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
34 /* Types and definitions. */
35 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
38 #define IRRECO_SELECT_CMD_DLG_BUTTON_ROW_WIDTH 600
39 #define IRRECO_SELECT_CMD_DLG_BUTTON_PAD 5
40 #define IRRECO_SELECT_CMD_DLG_EXPAND_BUTTONS FALSE
44 IRRECO_RESPONCE_EDIT
= 1,
45 IRRECO_RESPONCE_REFRESH
,
46 IRRECO_RESPONCE_COMMAND_SET
49 typedef struct _IrrecoButtonAppend IrrecoButtonAppend
;
50 struct _IrrecoButtonAppend
{
57 typedef struct _IrrecoSelectCmdDlg IrrecoSelectCmdDlg
;
58 struct _IrrecoSelectCmdDlg
{
59 IrrecoData
*irreco_data
;
68 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
70 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
71 void irreco_cmd_dlg_create_command_list(IrrecoSelectCmdDlg
* cmd_dlg
);
72 void irreco_cmd_dlg_setup_scrollbars(GtkWidget
* widget
);
73 void irreco_cmd_dlg_append_device(IrrecoSelectCmdDlg
* cmd_dlg
,
74 IrrecoBackendDevice
* device
);
75 void irreco_cmd_dlg_append_special(IrrecoSelectCmdDlg
* cmd_dlg
);
76 void irreco_cmd_dlg_append_wait_button(IrrecoSelectCmdDlg
* cmd_dlg
,
77 IrrecoButtonAppend
* button_append
,
79 GtkWidget
*irreco_cmd_dlg_append_hbox(GtkWidget
*vbox
,
80 guint padding_between
,
85 gfloat x_expand_scale
,
86 gfloat y_expand_scale
);
87 GtkWidget
*irreco_cmd_dlg_append_title_hbox(GtkWidget
*vbox
);
88 GtkWidget
*irreco_cmd_dlg_append_command_hbox(GtkWidget
*vbox
);
89 void irreco_cmd_dlg_append_button_init(IrrecoButtonAppend
* data
,
91 GtkWidget
*irreco_cmd_dlg_append_button(IrrecoButtonAppend
* data
,
96 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
98 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
100 gboolean
irreco_cmd_dlg_run(IrrecoData
*irreco_data
, IrrecoCmd
* command
,
103 IrrecoSelectCmdDlg cmd_dlg
;
107 memset(&cmd_dlg
, '\0', sizeof(cmd_dlg
));
108 cmd_dlg
.irreco_data
= irreco_data
;
109 cmd_dlg
.command
= command
;
111 /* Create objects. */
112 cmd_dlg
.dialog
= gtk_dialog_new_with_buttons(
113 _("Select command"), parent
,
114 /*irreco_window_manager_get_gtk_window(
115 irreco_data->window_manager),*/
116 GTK_DIALOG_MODAL
| GTK_DIALOG_DESTROY_WITH_PARENT
/* |
117 GTK_DIALOG_NO_SEPARATOR*/,
118 _("Refresh"), IRRECO_RESPONCE_REFRESH
,
119 GTK_STOCK_CANCEL
, GTK_RESPONSE_REJECT
,
120 /*_("Device controllers"), IRRECO_RESPONCE_EDIT,*/
122 cmd_dlg
.scrolled
= gtk_scrolled_window_new(0, 0);
124 /* Construct dialog. */
125 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(cmd_dlg
.scrolled
),
127 GTK_POLICY_AUTOMATIC
);
128 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(cmd_dlg
.dialog
)->vbox
),
130 irreco_cmd_dlg_create_command_list(&cmd_dlg
);
132 /* Scrollbar setup signal. */
133 g_signal_connect(G_OBJECT(cmd_dlg
.scrolled
), "size-allocate",
134 G_CALLBACK(irreco_cmd_dlg_setup_scrollbars
),
137 /* Min width, max height. */
138 gtk_window_resize(GTK_WINDOW(cmd_dlg
.dialog
), 1, 999);
139 gtk_widget_show_all(cmd_dlg
.dialog
);
141 while (rvalue
== -1) {
142 switch (gtk_dialog_run(GTK_DIALOG(cmd_dlg
.dialog
))) {
143 case GTK_RESPONSE_REJECT
:
147 case IRRECO_RESPONCE_COMMAND_SET
:
151 case IRRECO_RESPONCE_EDIT
:
152 irreco_show_backend_dlg(irreco_data
,
153 GTK_WINDOW(cmd_dlg
.dialog
));
154 irreco_cmd_dlg_create_command_list(&cmd_dlg
);
157 case IRRECO_RESPONCE_REFRESH
:
158 irreco_backend_manager_get_devcmd_lists(
159 irreco_data
->irreco_backend_manager
);
160 irreco_cmd_dlg_create_command_list(&cmd_dlg
);
165 gtk_widget_destroy(cmd_dlg
.dialog
);
166 IRRECO_RETURN_INT(rvalue
);
169 void irreco_cmd_dlg_create_command_list(IrrecoSelectCmdDlg
* cmd_dlg
)
172 if (cmd_dlg
->vbox
!= NULL
) {
173 gtk_widget_destroy(cmd_dlg
->vbox
);
175 cmd_dlg
->vbox
= gtk_vbox_new(FALSE
, 0);
176 gtk_scrolled_window_add_with_viewport(
177 GTK_SCROLLED_WINDOW(cmd_dlg
->scrolled
), cmd_dlg
->vbox
);
179 /* Iterate trough instance, device and command arrays. */
180 IRRECO_DEBUG("Generating command list\n");
181 IRRECO_BACKEND_MANAGER_FOREACH_INSTANCE(
182 cmd_dlg
->irreco_data
->irreco_backend_manager
, instance
)
183 IRRECO_DEBUG("Instance: \"%s\"\n", instance
->name
);
184 IRRECO_BACKEND_INSTANCE_FOREACH(instance
, device
)
185 IRRECO_DEBUG("Device: \"%s\"\n", device
->name
);
186 irreco_cmd_dlg_append_device(cmd_dlg
, device
);
187 IRRECO_BACKEND_INSTANCE_FOREACH_END
188 IRRECO_STRING_TABLE_FOREACH_END
190 IRRECO_DEBUG("Special commands.\n");
191 irreco_cmd_dlg_append_special(cmd_dlg
);
192 gtk_widget_show_all(cmd_dlg
->dialog
);
199 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
200 /* Signal handlers. */
201 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
202 void irreco_cmd_dlg_set_built_in(GtkButton
* button
,
203 IrrecoSelectCmdDlg
* cmd_dlg
)
208 type
= g_object_get_data(G_OBJECT(button
), "IrrecoCmdType");
209 irreco_cmd_set_builtin(cmd_dlg
->command
, (IrrecoCmdType
) type
);
210 gtk_dialog_response(GTK_DIALOG(cmd_dlg
->dialog
),
211 IRRECO_RESPONCE_COMMAND_SET
);
216 void irreco_cmd_dlg_set_layout(GtkButton
* button
,
217 IrrecoSelectCmdDlg
* cmd_dlg
)
222 name
= g_object_get_data(G_OBJECT(button
), "IrrecoCmdLayout");
223 irreco_cmd_set_layout(cmd_dlg
->command
, (const gchar
*) name
);
224 gtk_dialog_response(GTK_DIALOG(cmd_dlg
->dialog
),
225 IRRECO_RESPONCE_COMMAND_SET
);
230 void irreco_cmd_dlg_set_backend(GtkButton
* button
,
231 IrrecoSelectCmdDlg
* cmd_dlg
)
233 IrrecoBackendDevice
*device
;
234 const gchar
*command
;
237 device
= (IrrecoBackendDevice
*) g_object_get_data(
238 G_OBJECT(button
), "IrrecoCmdBackendDevice");
239 command
= (const gchar
*) g_object_get_data(
240 G_OBJECT(button
), "IrrecoCmdBackendCommand");
241 irreco_cmd_set_backend(cmd_dlg
->command
,
242 device
->backend_instance
,
245 gtk_dialog_response(GTK_DIALOG(cmd_dlg
->dialog
),
246 IRRECO_RESPONCE_COMMAND_SET
);
251 void irreco_cmd_dlg_set_wait(GtkButton
* button
, IrrecoSelectCmdDlg
* cmd_dlg
)
256 delay
= g_object_get_data(G_OBJECT(button
), "IrrecoCmdWaitDelay");
257 irreco_cmd_set_wait(cmd_dlg
->command
, (gulong
) delay
);
258 gtk_dialog_response(GTK_DIALOG(cmd_dlg
->dialog
),
259 IRRECO_RESPONCE_COMMAND_SET
);
265 * Set up scrollbars so that a tap on the scrollbar will scroll almost one
266 * screen worth of space.
268 void irreco_cmd_dlg_setup_scrollbars(GtkWidget
* widget
)
270 GtkAdjustment
*adjustment
;
273 adjustment
= gtk_scrolled_window_get_vadjustment(
274 GTK_SCROLLED_WINDOW(widget
));
275 adjustment
->step_increment
= adjustment
->page_size
* 0.65;
276 adjustment
->page_increment
= adjustment
->page_size
* 0.65;
278 IRRECO_DEBUG("value %f\n", adjustment
->value
);
279 IRRECO_DEBUG("lower %f\n", adjustment
->lower
);
280 IRRECO_DEBUG("upper %f\n", adjustment
->upper
);
281 IRRECO_DEBUG("step_increment %f\n", adjustment
->step_increment
);
282 IRRECO_DEBUG("page_increment %f\n", adjustment
->page_increment
);
283 IRRECO_DEBUG("page_size %f\n", adjustment
->page_size
);
290 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
291 /* Dialog construction. */
292 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
294 void irreco_cmd_dlg_append_commands(IrrecoSelectCmdDlg
* cmd_dlg
,
295 IrrecoBackendDevice
* device
)
297 IrrecoButtonAppend button_append
;
301 irreco_cmd_dlg_append_button_init(&button_append
, cmd_dlg
->vbox
);
302 IRRECO_BACKEND_DEVICE_FOREACH(device
, command
)
303 button
= irreco_cmd_dlg_append_button(&button_append
,
305 g_object_set_data(G_OBJECT(button
),
306 "IrrecoCmdBackendDevice",
308 g_object_set_data(G_OBJECT(button
),
309 "IrrecoCmdBackendCommand",
311 g_signal_connect(G_OBJECT(button
), "clicked",
312 G_CALLBACK(irreco_cmd_dlg_set_backend
),
314 IRRECO_BACKEND_DEVICE_FOREACH_END
318 void irreco_cmd_dlg_append_device(IrrecoSelectCmdDlg
* cmd_dlg
,
319 IrrecoBackendDevice
* device
)
323 GtkWidget
*arrow_align
;
324 GtkWidget
*device_label
;
325 GtkWidget
*instance_label
;
328 hbox
= irreco_cmd_dlg_append_title_hbox(cmd_dlg
->vbox
);
329 arrow
= gtk_arrow_new(GTK_ARROW_RIGHT
, GTK_SHADOW_NONE
);
330 arrow_align
= gtk_alignment_new(0.5, 0.5, 1, 1);
331 device_label
= gtk_label_new(device
->name
);
332 instance_label
= gtk_label_new(device
->backend_instance
->name
);
335 instance_label = gtk_label_new(
336 irreco_backend_instance_get_name_and_description(
337 device->backend_instance));
340 /* Arrow: 25px width, auto height, 5px padding left and right.*/
341 gtk_widget_set_size_request(arrow
, 25, 0);
342 gtk_misc_set_alignment(GTK_MISC(arrow
), 0.5, 0.5);
343 gtk_alignment_set_padding(GTK_ALIGNMENT(arrow_align
), 0, 0, 8, 8);
345 gtk_misc_set_alignment(GTK_MISC(device_label
), 0, 0.5);
346 gtk_misc_set_alignment(GTK_MISC(instance_label
), 0, 0.5);
348 gtk_container_add(GTK_CONTAINER(arrow_align
), arrow
);
349 gtk_box_pack_start(GTK_BOX(hbox
), instance_label
, 0, 0, 0);
350 gtk_box_pack_start(GTK_BOX(hbox
), arrow_align
, 0, 0, 0);
351 gtk_box_pack_start(GTK_BOX(hbox
), device_label
, 0, 0, 0);
353 if (irreco_backend_device_is_empty(device
)) {
354 GtkWidget
*label
= gtk_label_new(_("This device does not "
355 "have any commands."));
356 hbox
= irreco_cmd_dlg_append_command_hbox(cmd_dlg
->vbox
);
357 gtk_box_pack_start_defaults(GTK_BOX(hbox
), label
);
359 /*GtkWidget *command_vbox = gtk_vbox_new(FALSE, 10);*/
360 irreco_cmd_dlg_append_commands(cmd_dlg
, device
);
368 void irreco_cmd_dlg_append_special(IrrecoSelectCmdDlg
* cmd_dlg
)
373 IrrecoButtonAppend button_append
;
377 hbox
= irreco_cmd_dlg_append_title_hbox(cmd_dlg
->vbox
);
378 label
= gtk_label_new(_("Special commands"));
379 gtk_box_pack_start(GTK_BOX(hbox
), label
, 0, 0, 0);
381 /* Create next remote button. */
382 irreco_cmd_dlg_append_button_init(&button_append
, cmd_dlg
->vbox
);
383 button
= irreco_cmd_dlg_append_button(
384 &button_append
, _(IRRECO_COMMAND_NEXT_REMOTE_TITLE
));
385 g_object_set_data(G_OBJECT(button
), "IrrecoCmdType",
386 (gpointer
) IRRECO_COMMAND_NEXT_REMOTE
);
387 g_signal_connect(G_OBJECT(button
), "clicked",
388 G_CALLBACK(irreco_cmd_dlg_set_built_in
),
391 /* Create previous remote button. */
392 button
= irreco_cmd_dlg_append_button(
393 &button_append
, _(IRRECO_COMMAND_PREVIOUS_REMOTE_TITLE
));
394 g_object_set_data(G_OBJECT(button
), "IrrecoCmdType",
395 (gpointer
) IRRECO_COMMAND_PREVIOUS_REMOTE
);
396 g_signal_connect(G_OBJECT(button
), "clicked",
397 G_CALLBACK(irreco_cmd_dlg_set_built_in
),
400 /* Fullscreen toggle button. */
401 button
= irreco_cmd_dlg_append_button(
402 &button_append
, _(IRRECO_COMMAND_FULLSCREEN_TOGGLE_TITLE
));
403 g_object_set_data(G_OBJECT(button
), "IrrecoCmdType",
404 (gpointer
) IRRECO_COMMAND_FULLSCREEN_TOGGLE
);
405 g_signal_connect(G_OBJECT(button
), "clicked",
406 G_CALLBACK(irreco_cmd_dlg_set_built_in
),
409 /* Create show remote buttons. */
410 string
= g_string_new("");
411 IRRECO_STRING_TABLE_FOREACH_KEY(
412 cmd_dlg
->irreco_data
->irreco_layout_array
, layout_name
)
413 g_string_append(g_string_set_size(string
, 0),
414 _(IRRECO_COMMAND_SHOW_LAYOUT_TITLE_PREFIX
));
415 g_string_append(string
, layout_name
);
416 button
= irreco_cmd_dlg_append_button(&button_append
,
418 g_object_set_data(G_OBJECT(button
), "IrrecoCmdLayout",
419 (gpointer
) layout_name
);
420 g_signal_connect(G_OBJECT(button
), "clicked",
421 G_CALLBACK(irreco_cmd_dlg_set_layout
),
423 IRRECO_STRING_TABLE_FOREACH_END
424 g_string_free(string
, TRUE
);
426 /* Append wait buttons. */
427 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
428 IRRECO_SECONDS_TO_USEC(0.3));
429 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
430 IRRECO_SECONDS_TO_USEC(0.6));
431 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
432 IRRECO_SECONDS_TO_USEC(1));
433 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
434 IRRECO_SECONDS_TO_USEC(1.5));
435 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
436 IRRECO_SECONDS_TO_USEC(2));
437 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
438 IRRECO_SECONDS_TO_USEC(3));
439 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
440 IRRECO_SECONDS_TO_USEC(5));
441 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
442 IRRECO_SECONDS_TO_USEC(7));
443 irreco_cmd_dlg_append_wait_button(cmd_dlg
, &button_append
,
444 IRRECO_SECONDS_TO_USEC(10));
448 void irreco_cmd_dlg_append_wait_button(IrrecoSelectCmdDlg
* cmd_dlg
,
449 IrrecoButtonAppend
* button_append
,
457 command
= irreco_cmd_create();
458 irreco_cmd_set_wait(command
, delay
);
459 button
= irreco_cmd_dlg_append_button(
460 button_append
, irreco_cmd_get_short_name(command
));
461 irreco_cmd_destroy(command
);
464 string = g_string_new(NULL);
465 g_string_printf(string, _(IRRECO_COMMAND_WAIT_TITLE_FORMAT),
466 (float)(delay) / 1000);
468 g_string_free(string, TRUE);
472 g_object_set_data(G_OBJECT(button
), "IrrecoCmdWaitDelay",
474 g_signal_connect(G_OBJECT(button
), "clicked",
475 G_CALLBACK(irreco_cmd_dlg_set_wait
),
482 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
483 /* GtkHBox utility functions. */
484 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
485 GtkWidget
*irreco_cmd_dlg_append_hbox(GtkWidget
* vbox
,
486 guint padding_between
,
488 guint padding_bottom
,
491 gfloat x_expand_scale
,
492 gfloat y_expand_scale
)
498 hbox
= gtk_hbox_new(FALSE
, padding_between
);
499 align
= irreco_gtk_align(hbox
, 0, 0, x_expand_scale
, y_expand_scale
,
500 padding_top
, padding_bottom
, padding_left
,
502 gtk_box_pack_start(GTK_BOX(vbox
), align
, 0, 0, 0);
503 IRRECO_RETURN_PTR(hbox
);
506 void irreco_cmd_dlg_append_separator(GtkWidget
* vbox
,
508 guint padding_bottom
)
513 align
= irreco_gtk_align(gtk_hseparator_new(), 0, 0, 1, 1,
514 padding_top
, padding_bottom
, 20, 0);
515 gtk_box_pack_start(GTK_BOX(vbox
), align
, 0, 0, 0);
519 GtkWidget
*irreco_cmd_dlg_append_title_hbox(GtkWidget
* vbox
)
524 hbox
= irreco_cmd_dlg_append_hbox(vbox
,
525 0, /*padding_between */
527 0, /*padding_bottom */
528 25, /*padding_left */
529 20, /*padding_right */
530 0, /* x_expand_scale */
531 0 /* y_expand_scale */
533 irreco_cmd_dlg_append_separator(vbox
, 2, 6);
534 IRRECO_RETURN_PTR(hbox
);
537 GtkWidget
*irreco_cmd_dlg_append_command_hbox(GtkWidget
* vbox
)
539 return irreco_cmd_dlg_append_hbox(vbox
,
540 IRRECO_SELECT_CMD_DLG_BUTTON_PAD
, /* padding_between */
542 IRRECO_SELECT_CMD_DLG_BUTTON_PAD
, /* padding_bottom */
543 25, /* padding_left */
544 20, /* padding_right */
545 IRRECO_SELECT_CMD_DLG_EXPAND_BUTTONS
, /* x_expand_scale */
546 0 /* y_expand_scale */
555 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
556 /* Button adding to button rows. */
557 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
560 * Initialize IrrecoButtonAppend structure.
562 * There is no need to clean IrrecoButtonAppend structure because all
563 * created widgets will be attached to the vbox.
565 void irreco_cmd_dlg_append_button_init(IrrecoButtonAppend
* data
,
570 data
->hbox
= irreco_cmd_dlg_append_command_hbox(vbox
);
577 * Add a button to button row. Creates a new button row if current is full.
579 * Returns: a new GtkButton.
581 GtkWidget
*irreco_cmd_dlg_append_button(IrrecoButtonAppend
* data
,
585 GtkRequisition requisition
;
588 /* Because you cant get widget data->width without adding it to a
589 container, this code does thing a bit backwards. */
590 button
= gtk_button_new_with_label(title
);
591 gtk_box_pack_start_defaults(GTK_BOX(data
->hbox
), button
);
592 gtk_widget_size_request(GTK_WIDGET(button
), &requisition
);
593 data
->width
+= requisition
.width
+ IRRECO_SELECT_CMD_DLG_BUTTON_PAD
;
595 /* If we have too much buttons on one row, destroy button,
596 and create another button on a new row. */
597 if (data
->width
> IRRECO_SELECT_CMD_DLG_BUTTON_ROW_WIDTH
598 && data
->count
> 0) {
599 gtk_widget_destroy(button
);
601 data
->width
= requisition
.width
+
602 IRRECO_SELECT_CMD_DLG_BUTTON_PAD
;
603 data
->hbox
= irreco_cmd_dlg_append_command_hbox(data
->vbox
);
604 button
= gtk_button_new_with_label(title
);
605 gtk_box_pack_start_defaults(GTK_BOX(data
->hbox
), button
);
609 IRRECO_RETURN_PTR(button
);