/** * he_helper_tap_and_hold_setup: * @widget: A #GtkWidget for which to activate tap-and-hold for. * @tap_and_hold_id: location to store the tap-and-hold signal handler's ID; pass NULL if the value is to be discarded * @button_press_event_id: location to store the button-press-event signal handler's ID; pass NULL if the value is to be discarded * * Fakes a 3rd-button press when tap-and-hold is done on @widget. * **/ void he_helper_tap_and_hold_setup (GtkWidget *widget, gulong *tap_and_hold_id, gulong *button_press_event_id) { gulong tmp_tap_and_hold_id; gulong tmp_button_press_event_id; g_return_if_fail (GTK_IS_WIDGET (widget)); /* Enable tap-and-hold */ gtk_widget_tap_and_hold_setup (widget, NULL, NULL, GTK_TAP_AND_HOLD_NONE); /* Setup the tap and hold handler callback */ tmp_tap_and_hold_id = g_signal_connect (G_OBJECT (widget), "tap-and-hold", G_CALLBACK (tap_and_hold_simulate_click), GUINT_TO_POINTER (3)); /* Setup the filter callback */ tmp_button_press_event_id = g_signal_connect (G_OBJECT (widget), "button-press-event", G_CALLBACK (tap_and_hold_button_press_filter), NULL); if (tap_and_hold_id) *tap_and_hold_id = tmp_tap_and_hold_id; if (button_press_event_id) *button_press_event_id = tmp_button_press_event_id; }
void switcher_button_init(SwitcherButton *self) { self->priv = SWITCHER_BUTTON_GET_PRIVATE(self); self->priv->osso = osso_initialize("layoutswitcher", VERSION, 0, 0); self->priv->model = tabletModel(); switch (self->priv->model) { case N800: printf("800\n"); break; case N810: printf("810\n"); break; case N900: printf("900\n"); break; case N770: printf("770\n"); break; } self->priv->locked = 0; self->priv->theme = gtk_icon_theme_get_default(); self->priv->lock = gtk_icon_theme_load_icon(self->priv->theme, "layoutswitcher-lock", 40, (GtkIconLookupFlags)0, 0); self->priv->icon0 = 0; self->priv->icon1 = 0; self->priv->gconfClient = gconf_client_get_default(); if (self->priv->model == N800 || self->priv->model == N810) { gconf_client_add_dir(self->priv->gconfClient, GCONF_DIR_2008, GCONF_CLIENT_PRELOAD_NONE, 0); self->priv->gconfNotifyCurrent = gconf_client_notify_add(self->priv->gconfClient, GCONF_CURRENT_2008, switcher_button_on_current_changed, self, 0, 0); self->priv->gconfNotifyLang0 = gconf_client_notify_add(self->priv->gconfClient, GCONF_LANG0_2008, switcher_button_on_language_changed, self, 0, 0); self->priv->gconfNotifyLang1 = gconf_client_notify_add(self->priv->gconfClient, GCONF_LANG1_2008, switcher_button_on_language_changed, self, 0, 0); } else if (self->priv->model == N770) { gconf_client_add_dir(self->priv->gconfClient, GCONF_DIR_2006, GCONF_CLIENT_PRELOAD_NONE, 0); self->priv->gconfNotifyCurrent = gconf_client_notify_add(self->priv->gconfClient, GCONF_CURRENT_2006, switcher_button_on_current_changed, self, 0, 0); self->priv->gconfNotifyLang0 = gconf_client_notify_add(self->priv->gconfClient, GCONF_LANG0_2006, switcher_button_on_language_changed, self, 0, 0); self->priv->gconfNotifyLang1 = gconf_client_notify_add(self->priv->gconfClient, GCONF_LANG1_2006, switcher_button_on_language_changed, self, 0, 0); } gconf_client_add_dir(self->priv->gconfClient, GCONF_LOCK_DIR, GCONF_CLIENT_PRELOAD_NONE, 0); self->priv->gconfNotifyLock = gconf_client_notify_add(self->priv->gconfClient, GCONF_LOCK_ENTRY, switcher_button_on_lock_changed, self, 0, 0); self->priv->menu = gtk_menu_new(); self->priv->menuItemCopy = gtk_menu_item_new_with_label("Copy text"); self->priv->menuItemBlock= gtk_check_menu_item_new_with_label("Block keyboard"); g_signal_connect(G_OBJECT(self->priv->menuItemCopy), "activate", G_CALLBACK(switcher_button_on_copy_menu), self); g_signal_connect(G_OBJECT(self->priv->menuItemBlock), "activate", G_CALLBACK(switcher_button_on_block_menu), self); gtk_menu_shell_append(GTK_MENU_SHELL(self->priv->menu), self->priv->menuItemCopy); gtk_menu_shell_append(GTK_MENU_SHELL(self->priv->menu), self->priv->menuItemBlock); gtk_widget_show_all(self->priv->menu); g_signal_connect(G_OBJECT(self), "clicked", G_CALLBACK(switcher_button_on_click), 0); if (self->priv->model == N770) { g_signal_connect(G_OBJECT(self), "tap-and-hold", G_CALLBACK(switcher_button_on_tap_and_hold), 0); gtk_widget_tap_and_hold_setup(GTK_WIDGET(self), 0, 0, 0); } else { // g_signal_connect(G_OBJECT(self), "tap-and-hold", G_CALLBACK(switcher_button_on_tap_and_hold), 0); gtk_widget_tap_and_hold_setup(GTK_WIDGET(self), self->priv->menu, 0, 0); } g_signal_connect_after(G_OBJECT(self), "expose-event", G_CALLBACK(switcher_button_on_expose), 0); switcher_button_update_languages(self); }