| 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 |