static void hippo_status_icon_popup_menu(GtkStatusIcon *gtk_icon, guint button, guint32 activate_time) { HippoStatusIcon *icon = HIPPO_STATUS_ICON(gtk_icon); GtkWidget *menu_item; GtkWidget *label; /* We used to only show the Quit item in "leet_mode" */ GdkModifierType state; gboolean leet_mode; leet_mode = FALSE; if (gtk_get_current_event_state(&state)) { if (state & GDK_CONTROL_MASK) leet_mode = TRUE; } destroy_menu(icon); icon->popup_menu = gtk_menu_new(); menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_HOME, NULL); label = gtk_bin_get_child(GTK_BIN(menu_item)); gtk_label_set_text(GTK_LABEL(label), _("My Mugshot home page")); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(hippo_app_show_home), hippo_get_app()); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(icon->popup_menu), menu_item); menu_item = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(hippo_app_show_about), hippo_get_app()); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(icon->popup_menu), menu_item); menu_item = gtk_separator_menu_item_new(); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(icon->popup_menu), menu_item); if (leet_mode) { menu_item = gtk_menu_item_new_with_label ("Toggle Connected"); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(on_toggle_connected_activated), NULL); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(icon->popup_menu), menu_item); } menu_item = gtk_image_menu_item_new_from_stock (GTK_STOCK_QUIT, NULL); g_signal_connect_swapped(menu_item, "activate", G_CALLBACK(on_quit_activated), NULL); gtk_widget_show(menu_item); gtk_menu_shell_append(GTK_MENU_SHELL(icon->popup_menu), menu_item); gtk_menu_popup (GTK_MENU(icon->popup_menu), NULL, NULL, gtk_status_icon_position_menu, icon, button, activate_time); gtk_menu_shell_select_first(GTK_MENU_SHELL(icon->popup_menu), FALSE); }
void edit_done_menu (struct WMenu *wmenu) { int i; for (i = 0; i < N_menus; i++) destroy_menu (wmenu->menu[i]); g_free(wmenu->menu); }
void replayview_abort(void *a) { MenuData *m = a; m->quit = 2; if(m->context) { // will unlikely get here MenuData *sm = m->context; destroy_menu(sm); m->context = NULL; } }
static void hippo_status_icon_finalize(GObject *object) { HippoStatusIcon *icon = HIPPO_STATUS_ICON(object); g_signal_handlers_disconnect_by_func(hippo_data_cache_get_connection(icon->cache), G_CALLBACK(on_state_changed), icon); destroy_menu(icon); g_object_unref(icon->cache); G_OBJECT_CLASS(hippo_status_icon_parent_class)->finalize(object); }
static void replayview_draw(MenuData *m) { draw_stage_menu(m); if(m->context) { MenuData *sm = m->context; menu_logic(sm); if(sm->quit == 2) { destroy_menu(sm); m->context = NULL; } else { fade_out(0.3 * (1 - sm->fade)); replayview_draw_stagemenu(sm); if(!sm->abort && sm->quit == 1) m->fade = sm->fade; } } }
bool menu_extension::on_hooked_message(message_hook_manager::t_message_hook_type p_type, int code, WPARAM wp, LPARAM lp) { static POINT last_pt; if (code == MSGF_MENU) { switch(((MSG*)lp)->message) { case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: { SendMessage(wnd_menu, TB_SETHOTITEM, -1, 0); if (((MSG*)lp)->message == WM_LBUTTONDOWN) { POINT pt; RECT toolbar; GetClientRect(get_wnd(), &toolbar); pt.y = GET_Y_LPARAM(((MSG*)lp)->lParam); pt.x = GET_X_LPARAM(((MSG*)lp)->lParam); if (ScreenToClient(wnd_menu, &pt) && PtInRect(&toolbar, pt)) { t_size idx = SendMessage(wnd_menu, TB_HITTEST, 0, (long)&pt); if (idx >= 0 && idx < m_buttons.get_count()) redrop = false; } } } break; case WM_KEYDOWN: { switch ( ((MSG*)lp)->wParam ) { case VK_LEFT: if (!sub_menu_ref_count) { destroy_menu(); if (active_item==1) active_item = m_buttons.get_count(); else active_item--; uPostMessage(get_wnd(), MSG_CREATE_MENU, active_item, 0); } break; case VK_RIGHT: if (!is_submenu) { destroy_menu(); if (active_item==m_buttons.get_count()) active_item = 1; else active_item++; uPostMessage(get_wnd(), MSG_CREATE_MENU, active_item, 0); } break; case VK_ESCAPE: if (!sub_menu_ref_count) { SetFocus(wnd_menu); SendMessage(wnd_menu, TB_SETHOTITEM, active_item-1, 0); destroy_menu(); } break; } } break; case WM_MOUSEMOVE: { POINT px; px.y = GET_Y_LPARAM(((MSG*)lp)->lParam); px.x = GET_X_LPARAM(((MSG*)lp)->lParam); if (px.x != last_pt.x || px.y != last_pt.y) { HWND wnd_hit = WindowFromPoint(px); if (wnd_hit == wnd_menu) { POINT pt = px; int hot_item = SendMessage(wnd_menu, TB_GETHOTITEM, 0, 0); if (ScreenToClient(wnd_menu, &pt)) { t_size idx = SendMessage(wnd_menu, TB_HITTEST, 0, (long)&pt); if (idx >= 0 && idx < m_buttons.get_count() && (active_item-1) != idx) { destroy_menu(); active_item = idx+1; uPostMessage(get_wnd(), MSG_CREATE_MENU, active_item, 0); } } } } last_pt = px; } break; } } return false; }
void edit_done_menu (void) { int i; for (i = 0; i < N_menus; i++) destroy_menu (EditMenuBar[i]); }
void destroy_ui() { destroy_menu(); destroy_dialog(); XPLMUnregisterFlightLoopCallback(hide_dialog_flcb, NULL); }
static void do_html_select(unsigned char *attr, unsigned char *html, unsigned char *eof, unsigned char **end, struct html_context *html_context) { struct conv_table *ct = (struct conv_table *)html_context->special_f(html_context, SP_TABLE, NULL); struct form_control *fc; struct string lbl = NULL_STRING, orig_lbl = NULL_STRING; unsigned char **values = NULL; unsigned char **labels; unsigned char *name, *t_attr, *en; int namelen; int nnmi = 0; int order = 0; int preselect = -1; int group = 0; int i, max_width; int closing_tag; html_focusable(html_context, attr); init_menu(&lnk_menu); se: en = html; see: html = en; while (html < eof && *html != '<') html++; if (html >= eof) { abort: *end = html; if (lbl.source) done_string(&lbl); if (orig_lbl.source) done_string(&orig_lbl); if (values) { int j; for (j = 0; j < order; j++) mem_free_if(values[j]); mem_free(values); } destroy_menu(&lnk_menu); *end = en; return; } if (lbl.source) { unsigned char *q, *s = en; int l = html - en; while (l && isspace(s[0])) s++, l--; while (l && isspace(s[l-1])) l--; q = convert_string(ct, s, l, html_context->options->cp, CSM_DEFAULT, NULL, NULL, NULL); if (q) add_to_string(&lbl, q), mem_free(q); add_bytes_to_string(&orig_lbl, s, l); } if (html + 2 <= eof && (html[1] == '!' || html[1] == '?')) { html = skip_comment(html, eof); goto se; } if (parse_element(html, eof, &name, &namelen, &t_attr, &en)) { html++; goto se; } if (!namelen) goto see; if (name[0] == '/') { namelen--; if (!namelen) goto see; name++; closing_tag = 1; } else { closing_tag = 0; } if (closing_tag && !c_strlcasecmp(name, namelen, (const unsigned char *)"SELECT", 6)) { add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi); goto end_parse; } if (!c_strlcasecmp(name, namelen, (const unsigned char *)"OPTION", 6)) { add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi); if (!closing_tag) { unsigned char *value, *label; if (has_attr(t_attr, (unsigned char *)"disabled", html_context->doc_cp)) goto see; if (preselect == -1 && has_attr(t_attr, (unsigned char *)"selected", html_context->doc_cp)) preselect = order; value = get_attr_val(t_attr, (unsigned char *)"value", html_context->doc_cp); if (!mem_align_alloc(&values, order, order + 1, 0xFF)) goto abort; values[order++] = value; label = get_attr_val(t_attr, (unsigned char *)"label", html_context->doc_cp); if (label) new_menu_item(&lnk_menu, label, order - 1, 0); if (!value || !label) { init_string(&lbl); init_string(&orig_lbl); nnmi = !!label; } } goto see; } if (!c_strlcasecmp(name, namelen, (const unsigned char *)"OPTGROUP", 8)) { add_select_item(&lnk_menu, &lbl, &orig_lbl, values, order, nnmi); if (group) new_menu_item(&lnk_menu, NULL, -1, 0), group = 0; if (!closing_tag) { unsigned char *label; label = get_attr_val(t_attr, (unsigned char *)"label", html_context->doc_cp); if (!label) { label = stracpy((const unsigned char *)""); if (!label) goto see; } new_menu_item(&lnk_menu, label, -1, 0); group = 1; } } goto see; end_parse: *end = en; if (!order) goto abort; labels = (unsigned char **)mem_calloc(order, sizeof(unsigned char *)); if (!labels) goto abort; fc = init_form_control(FC_SELECT, attr, html_context); if (!fc) { mem_free(labels); goto abort; } fc->id = get_attr_val(attr, (unsigned char *)"id", html_context->doc_cp); fc->name = get_attr_val(attr, (unsigned char *)"name", html_context->doc_cp); fc->default_state = preselect < 0 ? 0 : preselect; fc->default_value = order ? stracpy(values[fc->default_state]) : stracpy((const unsigned char *)""); fc->nvalues = order; fc->values = values; fc->menu = detach_menu(&lnk_menu); fc->labels = labels; menu_labels(fc->menu, (unsigned char *)"", labels); put_chrs(html_context, (unsigned char *)"[", 1); html_stack_dup(html_context, ELEMENT_KILLABLE); format.form = fc; format.style.attr |= AT_BOLD; max_width = 0; for (i = 0; i < order; i++) { if (!labels[i]) continue; #ifdef CONFIG_UTF8 if (html_context->options->utf8) int_lower_bound(&max_width, utf8_ptr2cells(labels[i], NULL)); else #endif /* CONFIG_UTF8 */ int_lower_bound(&max_width, strlen((const char *)labels[i])); } for (i = 0; i < max_width; i++) put_chrs(html_context, (unsigned char *)"_", 1); pop_html_element(html_context); put_chrs(html_context, (unsigned char *)"]", 1); html_context->special_f(html_context, SP_CONTROL, fc); }