static gboolean cb_treeview_motion (GtkWidget *widget, GdkEventMotion *event, StfDialogData *pagedata) { int x = (int)event->x; int col, dx; RenderData_t *renderdata = pagedata->fixed.renderdata; int old_ruler_x = pagedata->fixed.ruler_x; int colstart, colend, colwidth; gpointer user; pagedata->fixed.ruler_x = -1; /* We get events from the buttons too. Translate x. */ gdk_window_get_user_data (event->window, &user); if (GTK_IS_BUTTON (user)) { int ewx; gdk_window_get_position (event->window, &ewx, NULL); x += ewx; } stf_preview_find_column (renderdata, x, &col, &dx); colstart = (col == 0) ? 0 : stf_parse_options_fixed_splitpositions_nth (pagedata->parseoptions, col - 1); colend = stf_parse_options_fixed_splitpositions_nth (pagedata->parseoptions, col); colwidth = (colend == -1) ? G_MAXINT : colend - colstart; if (col >= 0 && col < renderdata->colcount) { int ci = calc_char_index (renderdata, col, &dx); if (ci <= colwidth) { int padx; GtkCellRenderer *cell = stf_preview_get_cell_renderer (renderdata, col); gtk_cell_renderer_get_padding (cell, &padx, NULL); pagedata->fixed.ruler_x = x - dx + padx; } } gdk_event_request_motions (event); if (pagedata->fixed.ruler_x == old_ruler_x) return FALSE; queue_redraw (widget, old_ruler_x); queue_redraw (widget, pagedata->fixed.ruler_x); return FALSE; }
static void update_cursor (MetaCursorRenderer *renderer) { MetaCursorRendererPrivate *priv = meta_cursor_renderer_get_instance_private (renderer); gboolean handled_by_backend; gboolean should_redraw = FALSE; if (priv->displayed_cursor) { CoglTexture *texture; int hot_x, hot_y; texture = meta_cursor_reference_get_cogl_texture (priv->displayed_cursor, &hot_x, &hot_y); priv->current_rect.x = priv->current_x - hot_x; priv->current_rect.y = priv->current_y - hot_y; priv->current_rect.width = cogl_texture_get_width (COGL_TEXTURE (texture)); priv->current_rect.height = cogl_texture_get_height (COGL_TEXTURE (texture)); } else { priv->current_rect.x = 0; priv->current_rect.y = 0; priv->current_rect.width = 0; priv->current_rect.height = 0; } handled_by_backend = META_CURSOR_RENDERER_GET_CLASS (renderer)->update_cursor (renderer); if (handled_by_backend != priv->handled_by_backend) { priv->handled_by_backend = handled_by_backend; should_redraw = TRUE; } if (!handled_by_backend) should_redraw = TRUE; if (should_redraw) queue_redraw (renderer); }