ui/gtk/menu.c

changeset 1038
832e9288f8e2
parent 1020
cae4af417424
child 1039
6691e007cef7
equal deleted inserted replaced
1037:fbe4bb4eba8c 1038:832e9288f8e2
151 void add_checkitem_widget(GtkWidget *p, int index, UiMenuItemI *item, UiObject *obj) { 151 void add_checkitem_widget(GtkWidget *p, int index, UiMenuItemI *item, UiObject *obj) {
152 UiMenuCheckItem *ci = (UiMenuCheckItem*)item; 152 UiMenuCheckItem *ci = (UiMenuCheckItem*)item;
153 GtkWidget *widget = gtk_check_menu_item_new_with_mnemonic(ci->label); 153 GtkWidget *widget = gtk_check_menu_item_new_with_mnemonic(ci->label);
154 gtk_menu_shell_append(GTK_MENU_SHELL(p), widget); 154 gtk_menu_shell_append(GTK_MENU_SHELL(p), widget);
155 155
156 if(ci->callback) { 156 UiVarEventData *event = malloc(sizeof(UiVarEventData));
157 UiEventData *event = malloc(sizeof(UiEventData)); 157 memset(event, 0, sizeof(UiVarEventData));
158 event->obj = obj; 158 event->obj = obj;
159 event->userdata = ci->userdata; 159 event->userdata = ci->userdata;
160 event->callback = ci->callback; 160 event->callback = ci->callback;
161 event->value = 0; 161 event->var = uic_widget_var(obj->ctx, obj->ctx, NULL, ci->varname, UI_VAR_INTEGER);
162 event->customdata = NULL; 162 if(event->var) {
163 163 UiInteger *v = event->var->value;
164 g_signal_connect( 164 v->obj = widget;
165 widget, 165 v->get = ui_checkitem_get;
166 "toggled", 166 v->set = ui_checkitem_set;
167 G_CALLBACK(ui_menu_event_toggled), 167 if(v->value != 0) {
168 event); 168 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), TRUE);
169 g_signal_connect( 169 }
170 widget, 170 }
171 "destroy", 171
172 G_CALLBACK(ui_destroy_userdata), 172 g_signal_connect(
173 event); 173 widget,
174 } 174 "toggled",
175 G_CALLBACK(ui_menu_event_toggled),
176 event);
177 g_signal_connect(
178 widget,
179 "destroy",
180 G_CALLBACK(ui_destroy_userdata),
181 event);
175 } 182 }
176 183
177 void add_radioitem_widget(GtkWidget *p, int index, UiMenuItemI *item, UiObject *obj) { 184 void add_radioitem_widget(GtkWidget *p, int index, UiMenuItemI *item, UiObject *obj) {
178 // TODO 185 // TODO
179 } 186 }
321 evt.intval = event->value; 328 evt.intval = event->value;
322 event->callback(&evt, event->userdata); 329 event->callback(&evt, event->userdata);
323 uic_set_tmp_eventdata(NULL, 0); 330 uic_set_tmp_eventdata(NULL, 0);
324 } 331 }
325 332
326 void ui_menu_event_toggled(GtkCheckMenuItem *ci, UiEventData *event) { 333 void ui_menu_event_toggled(GtkCheckMenuItem *ci, UiVarEventData *event) {
334 UiInteger *i = event->var ? event->var->value : NULL;
335
327 UiEvent evt; 336 UiEvent evt;
328 evt.obj = event->obj; 337 evt.obj = event->obj;
329 evt.window = event->obj->window; 338 evt.window = event->obj->window;
330 evt.document = event->obj->ctx->document; 339 evt.document = event->obj->ctx->document;
331 evt.eventdata = NULL; 340 evt.eventdata = i;
341 evt.eventdatatype = i ? UI_EVENT_DATA_INTEGER_VALUE : 0;
332 evt.intval = gtk_check_menu_item_get_active(ci); 342 evt.intval = gtk_check_menu_item_get_active(ci);
333 event->callback(&evt, event->userdata); 343 if(event->callback) {
344 event->callback(&evt, event->userdata);
345 }
346
347 if(i) {
348 ui_notify_evt(i->observers, &evt);
349 }
334 } 350 }
335 351
336 int64_t ui_checkitem_get(UiInteger *i) { 352 int64_t ui_checkitem_get(UiInteger *i) {
337 int state = gtk_check_menu_item_get_active(i->obj); 353 int state = gtk_check_menu_item_get_active(i->obj);
338 i->value = state; 354 i->value = state;
339 return state; 355 return state;
340 } 356 }
341 357
342 void ui_checkitem_set(UiInteger *i, int64_t value) { 358 void ui_checkitem_set(UiInteger *i, int64_t value) {
343 i->value = value; 359 i->value = value;
344 gtk_check_menu_item_set_active(i->obj, value); 360 gtk_check_menu_item_set_active(i->obj, (gboolean)value);
345 } 361 }
346 362
347 363
348 /* 364 /*
349 * widget menu functions 365 * widget menu functions

mercurial