Esempio n. 1
0
File: daemon.c Progetto: vain/xiate
gboolean
sig_button_press(GtkWidget *widget, GdkEvent *event, gpointer data)
{
    GtkClipboard *clip = NULL;
    char *url = NULL;

    (void)data;

    if (event->type == GDK_BUTTON_PRESS)
    {
        if (((GdkEventButton *)event)->button == 3)
        {
            clip = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
            url = vte_terminal_match_check_event(VTE_TERMINAL(widget),
                                                 event, NULL);
            if (url != NULL)
            {
                if (clip != NULL)
                    gtk_clipboard_set_text(clip, url, -1);
                g_free(url);
            }
        }
    }

    return FALSE;
}
Esempio n. 2
0
static void
popup_targets_received (GtkClipboard     *clipboard,
                        GtkSelectionData *data,
                        gpointer          user_data)
{
  PopupInfo *popup_info = user_data;
  g_autoptr(IdeTerminal) self = NULL;
  g_autoptr(GdkEvent) event = NULL;
  IdeTerminalPrivate *priv;

  g_assert (popup_info != NULL);
  g_assert (IDE_IS_TERMINAL (popup_info->terminal));

  self = g_steal_pointer (&popup_info->terminal);
  priv = ide_terminal_get_instance_private (self);
  event = g_steal_pointer (&popup_info->event);

  if (gtk_widget_get_realized (GTK_WIDGET (self)))
    {
      DzlWidgetActionGroup *group;
      GMenu *menu;
      gboolean clipboard_contains_text;
      gboolean have_selection;

      clipboard_contains_text = gtk_selection_data_targets_include_text (data);
      have_selection = vte_terminal_get_has_selection (VTE_TERMINAL (self));

      g_clear_pointer (&priv->popup_menu, gtk_widget_destroy);

      priv->url = vte_terminal_match_check_event (VTE_TERMINAL (self), event, NULL);

      menu = dzl_application_get_menu_by_id (DZL_APPLICATION_DEFAULT, "ide-terminal-view-popup-menu");
      priv->popup_menu = gtk_menu_new_from_model (G_MENU_MODEL (menu));

      group = DZL_WIDGET_ACTION_GROUP (gtk_widget_get_action_group (GTK_WIDGET (self), "terminal"));

      dzl_widget_action_group_set_action_enabled (group, "copy-link-address", priv->url != NULL);
      dzl_widget_action_group_set_action_enabled (group, "open-link", priv->url != NULL);
      dzl_widget_action_group_set_action_enabled (group, "copy-clipboard", have_selection);
      dzl_widget_action_group_set_action_enabled (group, "paste-clipboard", clipboard_contains_text);

      dzl_gtk_widget_add_style_class (priv->popup_menu, GTK_STYLE_CLASS_CONTEXT_MENU);
      gtk_menu_attach_to_widget (GTK_MENU (priv->popup_menu), GTK_WIDGET (self), popup_menu_detach);

      g_signal_emit (self, signals[POPULATE_POPUP], 0, priv->popup_menu);

      gtk_menu_popup_at_pointer (GTK_MENU (priv->popup_menu), event);
    }

  g_slice_free (PopupInfo, popup_info);
}
Esempio n. 3
0
gchar *
germinal_terminal_get_url (GerminalTerminal *self,
                           GdkEventButton   *button_event)
{
    GerminalTerminalPrivate *priv = germinal_terminal_get_instance_private (self);

    if (button_event) /* only access to cached url if no button_event available */
    {
        g_clear_pointer (&priv->url, g_free); /* free previous url */
        gint tag; /* avoid stupid vte segv (said to be optional) */

        priv->url = vte_terminal_match_check_event (VTE_TERMINAL (self), (GdkEvent *) button_event, &tag);
    }

    return priv->url;
}
Esempio n. 4
0
gboolean Terminal::vte_click(GtkWidget *vte, GdkEvent *event, gpointer user_data) {
    GdkEventButton *button_event = (GdkEventButton *)event;
    if (button_event->button != 1 || !(button_event->state & GDK_CONTROL_MASK))
        return FALSE;

    const char *url = vte_terminal_match_check_event(VTE_TERMINAL(vte), event, 0);
    if (!url)
        return FALSE;

    if (strcasestr(url, "http") != url)
        url = std::string(url).insert(0, "http://").c_str();

    if (vfork() == 0) {
        execlp("xdg-open", "xdg-open", url, NULL);
        _exit(0);
    }
}
Esempio n. 5
0
static gboolean
ide_terminal_button_press_event (GtkWidget      *widget,
                                 GdkEventButton *button)
{
  IdeTerminal *self = (IdeTerminal *)widget;

  g_assert (IDE_IS_TERMINAL (self));
  g_assert (button != NULL);

  if ((button->type == GDK_BUTTON_PRESS) && (button->button == GDK_BUTTON_SECONDARY))
    {
      if (!gtk_widget_has_focus (GTK_WIDGET (self)))
        gtk_widget_grab_focus (GTK_WIDGET (self));

      ide_terminal_do_popup (self, (GdkEvent *)button);

      return GDK_EVENT_STOP;
    }
  else if ((button->type == GDK_BUTTON_PRESS) && (button->button == GDK_BUTTON_PRIMARY)
            && ((button->state & GDK_CONTROL_MASK) == GDK_CONTROL_MASK))
    {
      g_autofree gchar *pattern = NULL;

      pattern = vte_terminal_match_check_event (VTE_TERMINAL (self), (GdkEvent *)button, NULL);

      if (pattern != NULL)
        {
          GtkApplication *app;
          GtkWindow *focused_window;

          if (NULL != (app = GTK_APPLICATION (g_application_get_default ())) &&
              NULL != (focused_window = gtk_application_get_active_window (app)))
            gtk_show_uri_on_window (focused_window,
                                    pattern,
                                    gtk_get_current_event_time (),
                                    NULL);
        }

      return GDK_EVENT_STOP;
    }

  return GTK_WIDGET_CLASS (ide_terminal_parent_class)->button_press_event (widget, button);
}
Esempio n. 6
0
File: vteapp.c Progetto: ari3s/vte
static int
button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
	VteTerminal *terminal;
	char *match;
	int tag;
	GtkBorder padding;
        gboolean has_extra_match;
        char *extra_match = NULL;

	switch (event->button) {
	case 3:
		terminal = VTE_TERMINAL(widget);

                gtk_style_context_get_padding(gtk_widget_get_style_context(widget),
                                              gtk_widget_get_state_flags(widget),
                                              &padding);
		match = vte_terminal_match_check_event(terminal,
                                                       (GdkEvent*)event,
                                                       &tag);
		if (match != NULL) {
			g_print("Matched `%s' (%d).\n", match, tag);
			g_free(match);
			if (GPOINTER_TO_INT(data) != 0) {
				vte_terminal_match_remove(terminal, tag);
			}
		}
#ifdef WITH_PCRE2
                if (!use_gregex) {
                        VteRegex *regex = vte_regex_new("\\d+", -1, PCRE2_UTF, NULL);
                        has_extra_match = vte_terminal_event_check_regex_simple(terminal,
                                                                                (GdkEvent*)event,
                                                                                &regex, 1,
                                                                                0,
                                                                                &extra_match);
                        vte_regex_unref(regex);
                } else
#endif
                {
                        GRegex *regex = g_regex_new("\\d+", 0, 0, NULL);
                        has_extra_match = vte_terminal_event_check_gregex_simple(terminal,
                                                                                 (GdkEvent*)event,
                                                                                 &regex, 1,
                                                                                 0,
                                                                                 &extra_match);
                        g_regex_unref(regex);
                }

                if (has_extra_match)
                        g_print("Extra regex match: %s\n", extra_match);
                else
                        g_print("Extra regex didn't match\n");
                g_free(extra_match);
		break;
	case 1:
	case 2:
	default:
		break;
	}
	return FALSE;
}