Exemplo n.º 1
0
Arquivo: popover.c Projeto: GNOME/gtk
static void
day_selected_cb (GtkCalendar *calendar,
                 gpointer     user_data)
{
    cairo_rectangle_int_t rect;
    GtkAllocation allocation;
    GtkWidget *popover;
    GdkEvent *event;

    event = gtk_get_current_event ();

    if (event->type != GDK_BUTTON_PRESS)
        return;

    gdk_window_coords_to_parent (event->button.window,
                                 event->button.x, event->button.y,
                                 &event->button.x, &event->button.y);
    gtk_widget_get_allocation (GTK_WIDGET (calendar), &allocation);
    rect.x = event->button.x - allocation.x;
    rect.y = event->button.y - allocation.y;
    rect.width = rect.height = 1;

    popover = create_popover (GTK_WIDGET (calendar),
                              gtk_entry_new (),
                              GTK_POS_BOTTOM);
    gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect);

    gtk_widget_show (popover);

    gdk_event_free (event);
}
Exemplo n.º 2
0
static gboolean
navigator_button_release_cb (GcalYearView   *year_view,
                             GdkEventButton *event,
                             GtkWidget      *widget)
{
  GcalYearViewPrivate *priv = year_view->priv;
  gint day, month;

  if (!priv->button_pressed)
    return FALSE;

  if (!calculate_day_month_for_coord (year_view, event->x, event->y, &day, &month))
    goto fail;

  priv->button_pressed = FALSE;
  priv->selected_data->end_day = day;
  priv->selected_data->end_month = month;

  /* update date and notify */
  priv->date->day = day;
  priv->date->month = month + 1;
  g_object_notify (G_OBJECT (year_view), "active-date");

  gtk_widget_queue_draw (widget);

  if (priv->popover_mode)
    {
      GdkRectangle rect;
      GtkWidget *box;

      /* sizing */
      box = gtk_bin_get_child (GTK_BIN (priv->popover));
      gtk_widget_set_size_request (box, 200, priv->navigator_grid->box_side * 2 * 7);

      /* FIXME: improve rect */
      rect.x = event->x;
      rect.y = event->y;
      rect.width = rect.height = 1;
      gtk_popover_set_pointing_to (GTK_POPOVER (priv->popover), &rect);

      /* FIXME: do no show over selected days */
      gtk_popover_set_position (GTK_POPOVER (priv->popover), GTK_POS_RIGHT);
      gtk_widget_show (priv->popover);
    }

  update_sidebar (year_view);
  return TRUE;

fail:
  priv->button_pressed = FALSE;
  reset_sidebar (year_view);
  return TRUE;
}
Exemplo n.º 3
0
Arquivo: popover.c Projeto: GNOME/gtk
static void
entry_icon_press_cb (GtkEntry             *entry,
                     GtkEntryIconPosition  icon_pos,
                     GdkEvent             *event,
                     gpointer              user_data)
{
    GtkWidget *popover = user_data;
    cairo_rectangle_int_t rect;

    gtk_entry_get_icon_area (entry, icon_pos, &rect);
    gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect);
    gtk_widget_show (popover);

    g_object_set_data (G_OBJECT (entry), "popover-icon-pos",
                       GUINT_TO_POINTER (icon_pos));
}
Exemplo n.º 4
0
Arquivo: popover.c Projeto: GNOME/gtk
static void
entry_size_allocate_cb (GtkEntry      *entry,
                        GtkAllocation *allocation,
                        gpointer       user_data)
{
    GtkEntryIconPosition popover_pos;
    GtkPopover *popover = user_data;
    cairo_rectangle_int_t rect;

    if (gtk_widget_is_visible (GTK_WIDGET (popover)))
    {
        popover_pos =
            GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (entry),
                              "popover-icon-pos"));
        gtk_entry_get_icon_area (entry, popover_pos, &rect);
        gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect);
    }
}
Exemplo n.º 5
0
static GtkWidget*
get_popup (EogZoomEntry *zoom_entry)
{
	GdkRectangle rect;

	if (zoom_entry->priv->popup)
		return zoom_entry->priv->popup;

	zoom_entry->priv->popup = gtk_popover_new_from_model (GTK_WIDGET (zoom_entry),
	                                                       G_MENU_MODEL (zoom_entry->priv->menu));
	g_signal_connect (zoom_entry->priv->popup, "closed",
	                  G_CALLBACK (popup_menu_closed),
	                  zoom_entry);
	gtk_entry_get_icon_area (GTK_ENTRY (zoom_entry->priv->value_entry),
	                         GTK_ENTRY_ICON_SECONDARY, &rect);
	gtk_popover_set_relative_to (GTK_POPOVER (zoom_entry->priv->popup),
	                             zoom_entry->priv->value_entry);
	gtk_popover_set_pointing_to (GTK_POPOVER (zoom_entry->priv->popup), &rect);
	gtk_popover_set_position (GTK_POPOVER (zoom_entry->priv->popup), GTK_POS_BOTTOM);
	gtk_widget_set_size_request (zoom_entry->priv->popup, 150, -1);

	return zoom_entry->priv->popup;
}
Exemplo n.º 6
0
static gboolean
term_mouse_button_released (VteTerminal    *vtterm,
                            GdkEventButton *event,
                            gpointer        userdata)
{
    g_free (last_match_text);
    last_match_text = NULL;

    glong row = (glong) (event->y) / vte_terminal_get_char_height (vtterm);
    glong col = (glong) (event->x) / vte_terminal_get_char_width  (vtterm);

    gint match_tag;
    dg_lmem gchar* match = vte_terminal_match_check (vtterm, col, row, &match_tag);

    if (match && event->button == 1) {
		if (CHECK_FLAGS (event->state, GDK_CONTROL_MASK)) {
			dg_lerr GError *gerror = NULL;
			if (!gtk_show_uri (NULL, match, event->time, &gerror))
				g_printerr ("Could not open URL: %s\n", gerror->message);
			return FALSE;
		} else if (g_regex_match (image_regex, match, 0, NULL)) {
			/* Show picture in a popover */
			GdkRectangle rect;
			rect.height = vte_terminal_get_char_height (vtterm);
			rect.width = vte_terminal_get_char_width (vtterm);
			rect.y = rect.height * row;
			rect.x = rect.width * col;

			GtkWidget* popover = make_popover_for_image_url (vtterm, match);
			gtk_popover_set_pointing_to (GTK_POPOVER (popover), &rect);
			return FALSE;
		}
    }


    if (event->button == 3 && userdata != NULL) {
        GdkRectangle rect;
        rect.height = vte_terminal_get_char_height (vtterm);
        rect.width = vte_terminal_get_char_width (vtterm);
        rect.y = rect.height * row;
        rect.x = rect.width * col;
        gtk_popover_set_pointing_to (GTK_POPOVER (userdata), &rect);

        GActionMap *actions = G_ACTION_MAP (gtk_widget_get_ancestor (GTK_WIDGET (vtterm),
                                                                     GTK_TYPE_WINDOW));
        g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (actions,
                                                                                  "copy")),
                                    vte_terminal_get_has_selection (vtterm));
        g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (actions,
                                                                                  "open-url")),
                                     match != NULL);
        g_simple_action_set_enabled (G_SIMPLE_ACTION (g_action_map_lookup_action (actions,
                                                                                  "copy-url")),
                                     match != NULL);
        if (match) {
            last_match_text = match;
            match = NULL;
        }

        gtk_widget_show_all (GTK_WIDGET (userdata));

        return TRUE;
    }

    return FALSE;
}