ui/common/action.c

changeset 1170
b79469a55540
parent 1127
d3a8c29ebdaa
child 1183
51c0e1053592
equal deleted inserted replaced
1169:c69f2941d536 1170:b79469a55540
141 action->callback(event, action->userdata); 141 action->callback(event, action->userdata);
142 } 142 }
143 } 143 }
144 } 144 }
145 145
146 void ui_call_action(UiContext *ctx, const char *action_name) { 146 static int call_action(UiContext *ctx, const char *action_name, void *eventdata, UiEventType eventdatatype, int intval) {
147 ui_call_action2(ctx, action_name, NULL, 0);
148 }
149
150 void ui_call_action2(UiContext *ctx, const char *action_name, void *eventdata, int intval) {
151 UiAction *action = uic_resolve_action(ctx, action_name); 147 UiAction *action = uic_resolve_action(ctx, action_name);
152 if(action && action->callback) { 148 if(action && action->callback) {
153 UiEvent event; 149 UiEvent event;
154 memset(&event, 0, sizeof(UiEvent)); 150 memset(&event, 0, sizeof(UiEvent));
155 event.obj = ctx->obj; 151 event.obj = ctx->obj;
156 event.window = event.obj ? event.obj->window : NULL; 152 event.window = event.obj ? event.obj->window : NULL;
157 event.document = ctx->self_doc ? ctx->self_doc : ctx->document; 153 event.document = ctx->self_doc ? ctx->self_doc : ctx->document;
158 if(eventdata) { 154 if(eventdata) {
159 event.eventdata = eventdata; 155 event.eventdata = eventdata;
160 event.eventdatatype = UI_EVENT_DATA_POINTER; 156 event.eventdatatype = eventdatatype;
161 } 157 }
162 event.intval = intval; 158 event.intval = intval;
163 action->callback(&event, action->userdata); 159 action->callback(&event, action->userdata);
164 } 160 return 1;
161 } else {
162 return 0;
163 }
164 }
165
166 int ui_call_action(UiContext *ctx, const char *action_name) {
167 return ui_call_action2(ctx, action_name, NULL, 0);
168 }
169
170 int ui_call_action2(UiContext *ctx, const char *action_name, void *eventdata, int intval) {
171 return call_action(ctx, action_name, eventdata, UI_EVENT_DATA_POINTER, intval);
172 }
173
174 int ui_call_action3(UiContext *ctx, const char *action_name, void *ptr, uint64_t type_id) {
175 UiTypedObj *obj = malloc(sizeof(UiTypedObj));
176 obj->ptr = ptr;
177 obj->type = type_id;
178 int ret = call_action(ctx, action_name, obj, UI_EVENT_DATA_TYPED_OBJECT, 0);
179 free(obj);
180 return ret;
165 } 181 }
166 182
167 void ui_broadcast_action(const char *action_name) { 183 void ui_broadcast_action(const char *action_name) {
168 ui_broadcast_action2(action_name, NULL, 0); 184 ui_broadcast_action2(action_name, NULL, 0);
169 } 185 }

mercurial