From b3e7dcac26bad70be05acef11c204092297865e2 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:21:05 -0800 Subject: [PATCH 01/65] Drop GitgSpinner --- configure.ac | 31 +- gitg/Makefile.am | 5 - gitg/gitg-repository-dialog.c | 75 ---- gitg/gitg-spinner.c | 794 ---------------------------------- gitg/gitg-spinner.h | 99 ----- 5 files changed, 3 insertions(+), 1001 deletions(-) delete mode 100644 gitg/gitg-spinner.c delete mode 100644 gitg/gitg-spinner.h diff --git a/configure.ac b/configure.ac index a03c51be..4782e994 100644 --- a/configure.ac +++ b/configure.ac @@ -66,7 +66,7 @@ AC_MSG_RESULT([$with_gtk]) case "$with_gtk" in 2.0) GTK_REQUIRED=gtk+-2.0 - GTK_REQUIRED_VERSION=2.18.0 + GTK_REQUIRED_VERSION=2.20.0 GTKSOURCEVIEW_REQUIRED=gtksourceview-2.0 GTKSOURCEVIEW_REQUIRED_VERSION=2.8.0 ;; @@ -116,32 +116,10 @@ if test "$enable_deprecations" = "yes"; then -DGDK_DISABLE_DEPRECATED \ -DGTK_DISABLE_DEPRECATED \ -DGDK_PIXBUF_DISABLE_DEPRECATED \ --DGNOME_DISABLE_DEPRECATED" +-DGNOME_DISABLE_DEPRECATED \ +-DGSEAL_ENABLE" fi -if $PKG_CONFIG --atleast-version 2.19.0 $GTK_REQUIRED; then - gtkatleast= -else - gtkatleast=no -fi - -AM_CONDITIONAL(BUILD_SPINNER, test "$gtkatleast" = "no") -if test "$gtkatleast" = "no"; then - AC_DEFINE([BUILD_SPINNER],[1],[Whether to use GitgSpinner instead of GtkSpinner]) -fi - -if $PKG_CONFIG --atleast-version 2.21.0 $GTK_REQUIRED; then - gtkatleast=yes -else - gtkatleast= -fi - -if test "$gtkatleast" = "yes"; then - DISABLE_DEPRECATED_CFLAGS="$DISABLE_DEPRECATED_CFLAGS -DGSEAL_ENABLE" -fi - -AC_SUBST(DISABLE_DEPRECATED_CFLAGS) - PACKAGE_LIBS="$PACKAGE_LIBS -lm" AC_SUBST(PACKAGE_CFLAGS) @@ -165,13 +143,10 @@ tools/Makefile AC_OUTPUT -gtkversion=`$PKG_CONFIG --modversion $GTK_REQUIRED` - echo " Configuration: Source code location: ${srcdir} Compiler: ${CC} - gtk+ version: ${gtkversion} " diff --git a/gitg/Makefile.am b/gitg/Makefile.am index 5aa8e354..45222067 100644 --- a/gitg/Makefile.am +++ b/gitg/Makefile.am @@ -57,11 +57,6 @@ gitg_SOURCES = \ gitg-window.c \ $(NOINST_H_FILES) -if BUILD_SPINNER -gitg_SOURCES += gitg-spinner.c -NOINST_H_FILES += gitg-spinner.h -endif - gitg_LDADD = \ $(GITG_LIBS) \ $(PACKAGE_LIBS) \ diff --git a/gitg/gitg-repository-dialog.c b/gitg/gitg-repository-dialog.c index 41788c2d..0c4652c9 100644 --- a/gitg/gitg-repository-dialog.c +++ b/gitg/gitg-repository-dialog.c @@ -33,10 +33,6 @@ #include #endif -#ifdef BUILD_SPINNER -#include "gitg-spinner.h" -#endif - void on_button_fetch_remote_clicked (GtkButton *button, GitgRepositoryDialog *dialog); @@ -104,11 +100,7 @@ typedef struct GitgShell *shell; GtkTreeRowReference *reference; -#ifdef BUILD_SPINNER - GitgSpinner *spinner; -#else guint pulse_id; -#endif } FetchInfo; static void @@ -125,13 +117,6 @@ fetch_cleanup (FetchInfo *info) &iter, path); -#ifdef BUILD_SPINNER - gtk_list_store_set (info->dialog->priv->list_store_remotes, - &iter, - COLUMN_SPINNER, NULL, - -1); -#endif - gtk_list_store_set (info->dialog->priv->list_store_remotes, &iter, COLUMN_FETCH, FALSE, @@ -140,14 +125,7 @@ fetch_cleanup (FetchInfo *info) gtk_tree_path_free (path); } -#ifdef BUILD_SPINNER - if (info->spinner) - { - g_object_unref (info->spinner); - } -#else g_source_remove (info->pulse_id); -#endif gtk_tree_row_reference_free (info->reference); g_object_unref (info->shell); @@ -290,25 +268,6 @@ add_remote (GitgRepositoryDialog *dialog, gchar const *name, gchar const *url, G -1); } -#ifdef BUILD_SPINNER -static void -on_spinner_frame (GitgSpinner *spinner, GdkPixbuf *pixbuf, FetchInfo *info) -{ - GtkTreeIter iter; - GtkTreePath *path = gtk_tree_row_reference_get_path (info->reference); - - gtk_tree_model_get_iter (GTK_TREE_MODEL (info->dialog->priv->list_store_remotes), - &iter, - path); - - gtk_list_store_set (info->dialog->priv->list_store_remotes, - &iter, - COLUMN_SPINNER, pixbuf, - -1); - - gtk_tree_path_free (path); -} -#else static gboolean pulse_row (FetchInfo *info) { @@ -339,7 +298,6 @@ pulse_row (FetchInfo *info) return fetch; } -#endif static void on_fetch_begin_loading (GitgShell *shell, FetchInfo *info) @@ -356,18 +314,6 @@ on_fetch_begin_loading (GitgShell *shell, FetchInfo *info) COLUMN_FETCH, TRUE, -1); -#ifdef BUILD_SPINNER - info->spinner = gitg_spinner_new (GTK_ICON_SIZE_MENU); - gitg_spinner_set_screen (info->spinner, gtk_widget_get_screen (GTK_WIDGET (info->dialog))); - - g_signal_connect (info->spinner, "frame", G_CALLBACK (on_spinner_frame), info); - gitg_spinner_start (info->spinner); -#else - GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (info->dialog->priv->tree_view_remotes)); - - GValue cycle_duration = {0,}; - GValue num_steps = {0,}; - g_value_init (&cycle_duration, G_TYPE_UINT); g_value_init (&num_steps, G_TYPE_UINT); @@ -381,7 +327,6 @@ on_fetch_begin_loading (GitgShell *shell, FetchInfo *info) g_value_unset (&cycle_duration); g_value_unset (&num_steps); -#endif gtk_tree_path_free (path); update_fetch (info->dialog); @@ -516,7 +461,6 @@ init_properties(GitgRepositoryDialog *dialog) init_remotes(dialog); } -#ifndef BUILD_SPINNER static void fetch_data_spinner_cb (GtkTreeViewColumn *column, GtkCellRenderer *cell, @@ -538,7 +482,6 @@ fetch_data_spinner_cb (GtkTreeViewColumn *column, "pulse", pulse, NULL); } -#endif static void fetch_data_icon_cb (GtkTreeViewColumn *column, @@ -547,21 +490,6 @@ fetch_data_icon_cb (GtkTreeViewColumn *column, GtkTreeIter *iter, GitgRepositoryDialog *dialog) { -#ifdef BUILD_SPINNER - GdkPixbuf *fetch; - - gtk_tree_model_get (model, iter, COLUMN_SPINNER, &fetch, -1); - - if (fetch) - { - g_object_set (cell, "pixbuf", fetch, NULL); - g_object_unref (fetch); - } - else - { - g_object_set (cell, "stock-id", GTK_STOCK_NETWORK, NULL); - } -#else gboolean fetch; gtk_tree_model_get (model, iter, COLUMN_FETCH, &fetch, -1); @@ -569,7 +497,6 @@ fetch_data_icon_cb (GtkTreeViewColumn *column, g_object_set (G_OBJECT (cell), "visible", !fetch, NULL); -#endif } @@ -603,7 +530,6 @@ create_repository_dialog (GitgWindow *window) GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN (gtk_builder_get_object (b, "tree_view_remotes_column_name")); -#ifndef BUILD_SPINNER GtkCellRenderer *spinner_renderer = gtk_cell_renderer_spinner_new (); g_object_set (spinner_renderer, "visible", FALSE, NULL); @@ -615,7 +541,6 @@ create_repository_dialog (GitgWindow *window) (GtkTreeCellDataFunc)fetch_data_spinner_cb, repository_dialog, NULL); -#endif GtkCellRenderer *icon_renderer = GTK_CELL_RENDERER (gtk_builder_get_object (b, "tree_view_remotes_renderer_icon")); gtk_tree_view_column_set_cell_data_func (column, diff --git a/gitg/gitg-spinner.c b/gitg/gitg-spinner.c deleted file mode 100644 index 912bc241..00000000 --- a/gitg/gitg-spinner.c +++ /dev/null @@ -1,794 +0,0 @@ -/* - * gitg-spinner.c - * This file is part of gitg - * - * Copyright (C) 2009 - Jesse van den kieboom - * Copyright (C) 2005 - Paolo Maggi - * Copyright (C) 2002-2004 Marco Pesenti Gritti - * Copyright (C) 2004 Christian Persch - * Copyright (C) 2000 - Eazel, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * This widget was originally written by Andy Hertzfeld for - * Nautilus. It was then modified by Marco Pesenti Gritti and Christian Persch - * for Epiphany. - * - * Modified by the gitg Team, 2005. See the AUTHORS file for a - * list of people on the gitg Team. - * See the ChangeLog files for a list of changes. - * - * Modified by the gitg team, 2009. - * - * $Id$ - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "gitg-spinner.h" - -#include - -/* Spinner cache implementation */ - -#define GITG_TYPE_SPINNER_CACHE (gitg_spinner_cache_get_type()) -#define GITG_SPINNER_CACHE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), GITG_TYPE_SPINNER_CACHE, GitgSpinnerCache)) -#define GITG_SPINNER_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GITG_TYPE_SPINNER_CACHE, GitgSpinnerCacheClass)) -#define GITG_IS_SPINNER_CACHE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), GITG_TYPE_SPINNER_CACHE)) -#define GITG_IS_SPINNER_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GITG_TYPE_SPINNER_CACHE)) -#define GITG_SPINNER_CACHE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GITG_TYPE_SPINNER_CACHE, GitgSpinnerCacheClass)) - -typedef struct _GitgSpinnerCache GitgSpinnerCache; -typedef struct _GitgSpinnerCacheClass GitgSpinnerCacheClass; -typedef struct _GitgSpinnerCachePrivate GitgSpinnerCachePrivate; - -struct _GitgSpinnerCacheClass -{ - GObjectClass parent_class; -}; - -struct _GitgSpinnerCache -{ - GObject parent_object; - - /*< private >*/ - GitgSpinnerCachePrivate *priv; -}; - -#define GITG_SPINNER_CACHE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GITG_TYPE_SPINNER_CACHE, GitgSpinnerCachePrivate)) - -struct _GitgSpinnerCachePrivate -{ - /* Hash table of GdkScreen -> GitgSpinnerCacheData */ - GHashTable *hash; -}; - -typedef struct -{ - guint ref_count; - GtkIconSize size; - gint width; - gint height; - GdkPixbuf **animation_pixbufs; - guint n_animation_pixbufs; -} GitgSpinnerImages; - -#define LAST_ICON_SIZE GTK_ICON_SIZE_DIALOG + 1 -#define SPINNER_ICON_NAME "process-working" -#define SPINNER_FALLBACK_ICON_NAME "gnome-spinner" -#define GITG_SPINNER_IMAGES_INVALID ((GitgSpinnerImages *) 0x1) - -typedef struct -{ - GdkScreen *screen; - GtkIconTheme *icon_theme; - GitgSpinnerImages *images[LAST_ICON_SIZE]; -} GitgSpinnerCacheData; - -static void gitg_spinner_cache_class_init (GitgSpinnerCacheClass *klass); -static void gitg_spinner_cache_init (GitgSpinnerCache *cache); - -static GObjectClass *gitg_spinner_cache_parent_class; - -static GType -gitg_spinner_cache_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) - { - const GTypeInfo our_info = - { - sizeof (GitgSpinnerCacheClass), - NULL, - NULL, - (GClassInitFunc) gitg_spinner_cache_class_init, - NULL, - NULL, - sizeof (GitgSpinnerCache), - 0, - (GInstanceInitFunc) gitg_spinner_cache_init - }; - - type = g_type_register_static (G_TYPE_OBJECT, - "GitgSpinnerCache", - &our_info, 0); - } - - return type; -} - -static GitgSpinnerImages * -gitg_spinner_images_ref (GitgSpinnerImages *images) -{ - g_return_val_if_fail (images != NULL, NULL); - - images->ref_count++; - - return images; -} - -static void -gitg_spinner_images_unref (GitgSpinnerImages *images) -{ - g_return_if_fail (images != NULL); - - images->ref_count--; - - if (images->ref_count == 0) - { - guint i; - - /* LOG ("Freeing spinner images %p for size %d", images, images->size); */ - - for (i = 0; i < images->n_animation_pixbufs; ++i) - { - g_object_unref (images->animation_pixbufs[i]); - } - - g_free (images->animation_pixbufs); - g_free (images); - } -} - -static void -gitg_spinner_cache_data_unload (GitgSpinnerCacheData *data) -{ - GtkIconSize size; - GitgSpinnerImages *images; - - g_return_if_fail (data != NULL); - - /* LOG ("GitgSpinnerDataCache unload for screen %p", data->screen); */ - - for (size = GTK_ICON_SIZE_INVALID; size < LAST_ICON_SIZE; ++size) - { - images = data->images[size]; - data->images[size] = NULL; - - if (images != NULL && images != GITG_SPINNER_IMAGES_INVALID) - { - gitg_spinner_images_unref (images); - } - } -} - -static GdkPixbuf * -extract_frame (GdkPixbuf *grid_pixbuf, - int x, - int y, - int size) -{ - GdkPixbuf *pixbuf; - - if (x + size > gdk_pixbuf_get_width (grid_pixbuf) || - y + size > gdk_pixbuf_get_height (grid_pixbuf)) - { - return NULL; - } - - pixbuf = gdk_pixbuf_new_subpixbuf (grid_pixbuf, - x, y, - size, size); - g_return_val_if_fail (pixbuf != NULL, NULL); - - return pixbuf; -} - -static GdkPixbuf * -scale_to_size (GdkPixbuf *pixbuf, - int dw, - int dh) -{ - GdkPixbuf *result; - int pw, ph; - - g_return_val_if_fail (pixbuf != NULL, NULL); - - pw = gdk_pixbuf_get_width (pixbuf); - ph = gdk_pixbuf_get_height (pixbuf); - - if (pw != dw || ph != dh) - { - result = gdk_pixbuf_scale_simple (pixbuf, dw, dh, - GDK_INTERP_BILINEAR); - g_object_unref (pixbuf); - return result; - } - - return pixbuf; -} - -static GitgSpinnerImages * -gitg_spinner_images_load (GdkScreen *screen, - GtkIconTheme *icon_theme, - GtkIconSize icon_size) -{ - GitgSpinnerImages *images; - GdkPixbuf *icon_pixbuf, *pixbuf; - GtkIconInfo *icon_info = NULL; - int grid_width, grid_height, x, y, requested_size, size, isw, ish, n; - const char *icon; - GSList *list = NULL, *l; - - /* LOG ("GitgSpinnerCacheData loading for screen %p at size %d", screen, icon_size); */ - - /* START_PROFILER ("loading spinner animation") */ - - if (screen == NULL) - screen = gdk_screen_get_default (); - - if (!gtk_icon_size_lookup_for_settings (gtk_settings_get_for_screen (screen), - icon_size, &isw, &ish)) - goto loser; - - requested_size = MAX (ish, isw); - - /* Load the animation. The 'rest icon' is the 0th frame */ - icon_info = gtk_icon_theme_lookup_icon (icon_theme, - SPINNER_ICON_NAME, - requested_size, 0); - - if (icon_info == NULL) - { - g_warning ("Throbber animation not found"); - - /* If the icon naming spec compliant name wasn't found, try the old name */ - icon_info = gtk_icon_theme_lookup_icon (icon_theme, - SPINNER_FALLBACK_ICON_NAME, - requested_size, 0); - if (icon_info == NULL) - { - g_warning ("Throbber fallback animation not found either"); - goto loser; - } - } - - g_assert (icon_info != NULL); - - size = gtk_icon_info_get_base_size (icon_info); - icon = gtk_icon_info_get_filename (icon_info); - - if (icon == NULL) - goto loser; - - icon_pixbuf = gdk_pixbuf_new_from_file (icon, NULL); - gtk_icon_info_free (icon_info); - icon_info = NULL; - - if (icon_pixbuf == NULL) - { - g_warning ("Could not load the spinner file"); - goto loser; - } - - grid_width = gdk_pixbuf_get_width (icon_pixbuf); - grid_height = gdk_pixbuf_get_height (icon_pixbuf); - - n = 0; - for (y = 0; y < grid_height; y += size) - { - for (x = 0; x < grid_width ; x += size) - { - pixbuf = extract_frame (icon_pixbuf, x, y, size); - - if (pixbuf) - { - list = g_slist_prepend (list, pixbuf); - ++n; - } - else - { - g_warning ("Cannot extract frame (%d, %d) from the grid\n", x, y); - } - } - } - - g_object_unref (icon_pixbuf); - - if (list == NULL) - goto loser; - - /* g_assert (n > 0); */ - - if (size > requested_size) - { - for (l = list; l != NULL; l = l->next) - { - l->data = scale_to_size (l->data, isw, ish); - } - } - - /* Now we've successfully got all the data */ - images = g_new (GitgSpinnerImages, 1); - images->ref_count = 1; - - images->size = icon_size; - images->width = images->height = requested_size; - - images->n_animation_pixbufs = n; - images->animation_pixbufs = g_new (GdkPixbuf *, n); - - for (l = list; l != NULL; l = l->next) - { - g_assert (l->data != NULL); - images->animation_pixbufs[--n] = l->data; - } - g_assert (n == 0); - - g_slist_free (list); - - /* STOP_PROFILER ("loading spinner animation") */ - return images; - -loser: - if (icon_info) - { - gtk_icon_info_free (icon_info); - } - - g_slist_foreach (list, (GFunc) g_object_unref, NULL); - - /* STOP_PROFILER ("loading spinner animation") */ - - return NULL; -} - -static GitgSpinnerCacheData * -gitg_spinner_cache_data_new (GdkScreen *screen) -{ - GitgSpinnerCacheData *data; - - data = g_new0 (GitgSpinnerCacheData, 1); - - data->screen = screen; - data->icon_theme = gtk_icon_theme_get_for_screen (screen); - - g_signal_connect_swapped (data->icon_theme, - "changed", - G_CALLBACK (gitg_spinner_cache_data_unload), - data); - - return data; -} - -static void -gitg_spinner_cache_data_free (GitgSpinnerCacheData *data) -{ - g_return_if_fail (data != NULL); - g_return_if_fail (data->icon_theme != NULL); - - g_signal_handlers_disconnect_by_func (data->icon_theme, - G_CALLBACK (gitg_spinner_cache_data_unload), - data); - - gitg_spinner_cache_data_unload (data); - - g_free (data); -} - -static GitgSpinnerImages * -gitg_spinner_cache_get_images (GitgSpinnerCache *cache, - GdkScreen *screen, - GtkIconSize icon_size) -{ - GitgSpinnerCachePrivate *priv = cache->priv; - GitgSpinnerCacheData *data; - GitgSpinnerImages *images; - - g_return_val_if_fail (icon_size >= 0 && icon_size < LAST_ICON_SIZE, NULL); - - data = g_hash_table_lookup (priv->hash, screen); - - if (data == NULL) - { - data = gitg_spinner_cache_data_new (screen); - - /* FIXME: think about what happens when the screen's display is closed later on */ - g_hash_table_insert (priv->hash, screen, data); - } - - images = data->images[icon_size]; - - if (images == GITG_SPINNER_IMAGES_INVALID) - { - /* Load failed, but don't try endlessly again! */ - return NULL; - } - - if (images != NULL) - { - /* Return cached data */ - return gitg_spinner_images_ref (images); - } - - images = gitg_spinner_images_load (screen, data->icon_theme, icon_size); - - if (images == NULL) - { - /* Mark as failed-to-load */ - data->images[icon_size] = GITG_SPINNER_IMAGES_INVALID; - - return NULL; - } - - data->images[icon_size] = images; - - return gitg_spinner_images_ref (images); -} - -static void -gitg_spinner_cache_init (GitgSpinnerCache *cache) -{ - GitgSpinnerCachePrivate *priv; - - priv = cache->priv = GITG_SPINNER_CACHE_GET_PRIVATE (cache); - - /* LOG ("GitgSpinnerCache initialising"); */ - - priv->hash = g_hash_table_new_full (g_direct_hash, - g_direct_equal, - NULL, - (GDestroyNotify) gitg_spinner_cache_data_free); -} - -static void -gitg_spinner_cache_finalize (GObject *object) -{ - GitgSpinnerCache *cache = GITG_SPINNER_CACHE (object); - GitgSpinnerCachePrivate *priv = cache->priv; - - g_hash_table_destroy (priv->hash); - - /* LOG ("GitgSpinnerCache finalised"); */ - - G_OBJECT_CLASS (gitg_spinner_cache_parent_class)->finalize (object); -} - -static void -gitg_spinner_cache_class_init (GitgSpinnerCacheClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - gitg_spinner_cache_parent_class = g_type_class_peek_parent (klass); - - object_class->finalize = gitg_spinner_cache_finalize; - - g_type_class_add_private (object_class, sizeof (GitgSpinnerCachePrivate)); -} - -static GitgSpinnerCache *spinner_cache = NULL; - -static GitgSpinnerCache * -gitg_spinner_cache_ref (void) -{ - if (spinner_cache == NULL) - { - GitgSpinnerCache **cache_ptr; - - spinner_cache = g_object_new (GITG_TYPE_SPINNER_CACHE, NULL); - cache_ptr = &spinner_cache; - g_object_add_weak_pointer (G_OBJECT (spinner_cache), - (gpointer *) cache_ptr); - - return spinner_cache; - } - - return g_object_ref (spinner_cache); -} - -/* Spinner implementation */ - -#define SPINNER_TIMEOUT 50 /* ms */ - -#define GITG_SPINNER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), GITG_TYPE_SPINNER, GitgSpinnerPrivate)) - -struct _GitgSpinnerPrivate -{ - GdkScreen *screen; - GitgSpinnerCache *cache; - GtkIconSize size; - GitgSpinnerImages *images; - guint current_image; - guint timeout; - guint timer_task; - guint spinning : 1; - guint need_load : 1; -}; - -enum -{ - FRAME, - NUM_SIGNALS -}; - -static guint spinner_signals[NUM_SIGNALS] = {0,}; - -static void gitg_spinner_class_init (GitgSpinnerClass *class); -static void gitg_spinner_init (GitgSpinner *spinner); - -static GObjectClass *parent_class; - -GType -gitg_spinner_get_type (void) -{ - static GType type = 0; - - if (G_UNLIKELY (type == 0)) - { - const GTypeInfo our_info = - { - sizeof (GitgSpinnerClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) gitg_spinner_class_init, - NULL, - NULL, /* class_data */ - sizeof (GitgSpinner), - 0, /* n_preallocs */ - (GInstanceInitFunc) gitg_spinner_init - }; - - type = g_type_register_static (G_TYPE_OBJECT, - "GitgSpinner", - &our_info, 0); - } - - return type; -} - -static gboolean -gitg_spinner_load_images (GitgSpinner *spinner) -{ - GitgSpinnerPrivate *priv = spinner->priv; - - if (priv->need_load) - { - priv->images = gitg_spinner_cache_get_images (priv->cache, priv->screen, priv->size); - - priv->current_image = 0; /* 'rest' icon */ - priv->need_load = FALSE; - } - - return priv->images != NULL; -} - -static void -gitg_spinner_unload_images (GitgSpinner *spinner) -{ - GitgSpinnerPrivate *priv = spinner->priv; - - if (priv->images != NULL) - { - gitg_spinner_images_unref (priv->images); - priv->images = NULL; - } - - priv->current_image = 0; - priv->need_load = TRUE; -} - -static void -gitg_spinner_init (GitgSpinner *spinner) -{ - spinner->priv = GITG_SPINNER_GET_PRIVATE (spinner); - - spinner->priv->cache = gitg_spinner_cache_ref (); - spinner->priv->size = GTK_ICON_SIZE_MENU; - spinner->priv->timeout = SPINNER_TIMEOUT; - spinner->priv->need_load = TRUE; -} - -static gboolean -bump_spinner_frame_cb (GitgSpinner *spinner) -{ - GitgSpinnerPrivate *priv = spinner->priv; - - /* This can happen when we've unloaded the images on a theme - * change, but haven't been in the queued size request yet. - * Just skip this update. - */ - if (priv->images == NULL) - { - if (!gitg_spinner_load_images (spinner)) - { - return FALSE; - } - } - - priv->current_image++; - - if (priv->current_image >= priv->images->n_animation_pixbufs) - { - /* the 0th frame is the 'rest' icon */ - priv->current_image = MIN (1, priv->images->n_animation_pixbufs); - } - - g_signal_emit (spinner, spinner_signals[FRAME], 0, priv->images->animation_pixbufs[priv->current_image]); - - /* run again */ - return TRUE; -} - -/** - * gitg_spinner_start: - * @spinner: a #GitgSpinner - * - * Start the spinner animation. - **/ -void -gitg_spinner_start (GitgSpinner *spinner) -{ - GitgSpinnerPrivate *priv = spinner->priv; - - priv->spinning = TRUE; - - if (priv->timer_task == 0 && gitg_spinner_load_images (spinner)) - { - /* the 0th frame is the 'rest' icon */ - priv->current_image = MIN (0, priv->images->n_animation_pixbufs); - - priv->timer_task = g_timeout_add_full (G_PRIORITY_LOW, - priv->timeout, - (GSourceFunc) bump_spinner_frame_cb, - spinner, - NULL); - - bump_spinner_frame_cb (spinner); - } -} - -static void -gitg_spinner_remove_update_callback (GitgSpinner *spinner) -{ - GitgSpinnerPrivate *priv = spinner->priv; - - if (priv->timer_task != 0) - { - g_source_remove (priv->timer_task); - priv->timer_task = 0; - } -} - -/** - * gitg_spinner_stop: - * @spinner: a #GitgSpinner - * - * Stop the spinner animation. - **/ -void -gitg_spinner_stop (GitgSpinner *spinner) -{ - GitgSpinnerPrivate *priv = spinner->priv; - - priv->spinning = FALSE; - priv->current_image = 0; - - if (priv->timer_task != 0) - { - gitg_spinner_remove_update_callback (spinner); - } -} - -void -gitg_spinner_set_screen (GitgSpinner *spinner, GdkScreen *screen) -{ - g_return_if_fail (GITG_IS_SPINNER (spinner)); - g_return_if_fail (GDK_IS_SCREEN (screen)); - - if (spinner->priv->screen != screen) - { - gitg_spinner_unload_images (spinner); - - if (spinner->priv->screen) - { - g_object_unref (spinner->priv->screen); - } - - spinner->priv->screen = g_object_ref (screen); - } -} - -static void -gitg_spinner_dispose (GObject *object) -{ - //GitgSpinner *spinner = GITG_SPINNER (object); - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -gitg_spinner_finalize (GObject *object) -{ - GitgSpinner *spinner = GITG_SPINNER (object); - - gitg_spinner_remove_update_callback (spinner); - gitg_spinner_unload_images (spinner); - - g_object_unref (spinner->priv->cache); - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -static void -gitg_spinner_class_init (GitgSpinnerClass *class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (class); - - parent_class = g_type_class_peek_parent (class); - - object_class->dispose = gitg_spinner_dispose; - object_class->finalize = gitg_spinner_finalize; - - spinner_signals[FRAME] = - g_signal_new ("frame", - G_OBJECT_CLASS_TYPE (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GitgSpinnerClass, frame), - NULL, NULL, - g_cclosure_marshal_VOID__OBJECT, - G_TYPE_NONE, - 1, - GDK_TYPE_PIXBUF); - - g_type_class_add_private (object_class, sizeof (GitgSpinnerPrivate)); -} - -GitgSpinner * -gitg_spinner_new (GtkIconSize size) -{ - GitgSpinner *spinner = g_object_new (GITG_TYPE_SPINNER, NULL); - - spinner->priv->size = size; - return spinner; -} - -GdkPixbuf * -gitg_spinner_get_pixbuf (GitgSpinner *spinner) -{ - g_return_val_if_fail (GITG_IS_SPINNER (spinner), NULL); - - if (spinner->priv->timer_task == 0) - { - return NULL; - } - - return g_object_ref (spinner->priv->images->animation_pixbufs[spinner->priv->current_image]); -} diff --git a/gitg/gitg-spinner.h b/gitg/gitg-spinner.h deleted file mode 100644 index b3d4e440..00000000 --- a/gitg/gitg-spinner.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * gitg-spinner.h - * This file is part of gitg - * - * Copyright (C) 2009 - Jesse van den Kieboom - * Copyright (C) 2005 - Paolo Maggi - * Copyright (C) 2000 - Eazel, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * This widget was originally written by Andy Hertzfeld for - * Nautilus. - * - * Modified by the gitg Team, 2005. See the AUTHORS file for a - * list of people on the gitg Team. - * See the ChangeLog files for a list of changes. - * - * Modified by the gitg Team, 2009 - * - * $Id$ - */ - -#ifndef __GITG_SPINNER_H__ -#define __GITG_SPINNER_H__ - -#include - -G_BEGIN_DECLS - -/* - * Type checking and casting macros - */ -#define GITG_TYPE_SPINNER (gitg_spinner_get_type ()) -#define GITG_SPINNER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GITG_TYPE_SPINNER, GitgSpinner)) -#define GITG_SPINNER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GITG_TYPE_SPINNER, GitgSpinnerClass)) -#define GITG_IS_SPINNER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GITG_TYPE_SPINNER)) -#define GITG_IS_SPINNER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GITG_TYPE_SPINNER)) -#define GITG_SPINNER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GITG_TYPE_SPINNER, GitgSpinnerClass)) - - -/* Private structure type */ -typedef struct _GitgSpinnerPrivate GitgSpinnerPrivate; - -/* - * Main object structure - */ -typedef struct _GitgSpinner GitgSpinner; - -struct _GitgSpinner -{ - GObject parent; - - /*< private >*/ - GitgSpinnerPrivate *priv; -}; - -/* - * Class definition - */ -typedef struct _GitgSpinnerClass GitgSpinnerClass; - -struct _GitgSpinnerClass -{ - GObjectClass parent_class; - - void (*frame)(GitgSpinner *spinner, GdkPixbuf *pixbuf); -}; - -/* - * Public methods - */ -GType gitg_spinner_get_type (void) G_GNUC_CONST; - -GitgSpinner *gitg_spinner_new (GtkIconSize size); -void gitg_spinner_set_screen (GitgSpinner *spinner, - GdkScreen *screen); -void gitg_spinner_start (GitgSpinner *spinner); -void gitg_spinner_stop (GitgSpinner *spinner); - -GdkPixbuf *gitg_spinner_get_pixbuf (GitgSpinner *spinner); - -G_END_DECLS - -#endif /* __GITG_SPINNER_H__ */ From 0c279704cfdf0e38603a248c9d872f36e1f38e85 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:27:15 -0800 Subject: [PATCH 02/65] Don't set a GtkLinkButton uri hook We don't have any GtkLinkButtons so its just pointless. --- gitg/gitg.c | 56 ----------------------------------------------------- 1 file changed, 56 deletions(-) diff --git a/gitg/gitg.c b/gitg/gitg.c index e2676f40..2372a104 100644 --- a/gitg/gitg.c +++ b/gitg/gitg.c @@ -37,7 +37,6 @@ static gboolean commit_mode = FALSE; static gchar *select_sha1 = NULL; -static GtkLinkButtonUriFunc original_link_button_hook; static void show_version_and_quit (void) @@ -167,57 +166,6 @@ set_icons () g_list_free (icons); } -static void -link_button_uri_hook (GtkLinkButton *button, - gchar const *link_, - GitgWindow *window) -{ - GFile *file; - GitgRepository *repository; - - file = g_file_new_for_uri (link_); - repository = gitg_window_get_repository (window); - - if (!g_file_has_uri_scheme (file, "gitg")) - { - original_link_button_hook (button, link_, NULL); - } - else if (repository) - { - gchar *work_tree_path; - gchar *selection; - gchar *activatable; - gchar *action; - - if (gitg_uri_parse (link_, &work_tree_path, &selection, &activatable, &action)) - { - GFile *wt; - GFile *work_tree; - gboolean equal; - - wt = gitg_repository_get_work_tree (repository); - work_tree = g_file_new_for_path (work_tree_path); - equal = g_file_equal (wt, work_tree); - - g_object_unref (wt); - g_object_unref (work_tree); - - if (equal) - { - gitg_window_select (window, selection); - gitg_window_activate (window, activatable, action); - } - - g_free (work_tree_path); - g_free (selection); - g_free (activatable); - g_free (action); - } - } - - g_object_unref (file); -} - int main (int argc, char **argv) { @@ -256,10 +204,6 @@ main (int argc, char **argv) gitg_window_show_commit (window); } - original_link_button_hook = gtk_link_button_set_uri_hook ((GtkLinkButtonUriFunc)link_button_uri_hook, - window, - NULL); - gtk_main (); return 0; From c6fab2379ece465b430c7bc5bab6d8671c88848f Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:31:07 -0800 Subject: [PATCH 03/65] Don't use gdk_cursor_unref GdkCursor is now a GObject so use g_object_unref instead. --- gitg/gitg-commit-view.c | 2 +- gitg/gitg-revision-changes-panel.c | 4 ++-- gitg/gitg-revision-details-panel.c | 4 ++-- gitg/gitg-window.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index ee82ce09..f1fe5fe6 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -147,7 +147,7 @@ gitg_commit_view_finalize (GObject *object) g_object_unref (view->priv->shell); g_object_unref (view->priv->ui_manager); - gdk_cursor_unref (view->priv->hand); + g_object_unref (view->priv->hand); G_OBJECT_CLASS (gitg_commit_view_parent_class)->finalize (object); } diff --git a/gitg/gitg-revision-changes-panel.c b/gitg/gitg-revision-changes-panel.c index ed0c403a..06cada85 100644 --- a/gitg/gitg-revision-changes-panel.c +++ b/gitg/gitg-revision-changes-panel.c @@ -704,7 +704,7 @@ on_diff_files_begin_loading (GitgShell *shell, gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (self->priv->diff_files)), cursor); - gdk_cursor_unref (cursor); + g_object_unref (cursor); } static void @@ -819,7 +819,7 @@ on_diff_begin_loading (GitgShell *shell, GdkCursor *cursor = gdk_cursor_new (GDK_WATCH); gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET(self->priv->diff)), cursor); - gdk_cursor_unref (cursor); + g_object_unref (cursor); } static void diff --git a/gitg/gitg-revision-details-panel.c b/gitg/gitg-revision-details-panel.c index 91413f61..93c91048 100644 --- a/gitg/gitg-revision-details-panel.c +++ b/gitg/gitg-revision-details-panel.c @@ -235,7 +235,7 @@ on_shell_begin (GitgShell *shell, panel->priv->in_stat = FALSE; - gdk_cursor_unref (cursor); + g_object_unref (cursor); } static void @@ -635,7 +635,7 @@ update_parents (GitgRevisionDetailsPanel *self) } } - gdk_cursor_unref (cursor); + g_object_unref (cursor); g_strfreev (parents); } diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 4a90bd62..2b341959 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -192,7 +192,7 @@ gitg_window_finalize (GObject *object) GitgWindow *self = GITG_WINDOW(object); g_timer_destroy (self->priv->load_timer); - gdk_cursor_unref (self->priv->hand); + g_object_unref (self->priv->hand); GList *copy = g_list_copy (self->priv->branch_actions); GList *item; @@ -1697,7 +1697,7 @@ on_repository_load (GitgRepository *repository, { GdkCursor *cursor = gdk_cursor_new (GDK_WATCH); gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window->priv->tree_view)), cursor); - gdk_cursor_unref (cursor); + g_object_unref (cursor); gtk_statusbar_push (window->priv->statusbar, 0, _ ("Begin loading repository")); From 36fa9b2fe8d4738c5ecc09aaafad4598670d90f6 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:33:17 -0800 Subject: [PATCH 04/65] Rename GDK_* to GDK_KEY_* and bumb GTK+ to 2.90.7 --- gitg/gitg-window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 2b341959..0c550bdf 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -520,7 +520,7 @@ build_search_entry (GitgWindow *window, GClosure *closure = g_cclosure_new (G_CALLBACK (focus_search), entry, NULL); - gtk_accel_group_connect (group, GDK_f, GDK_CONTROL_MASK, 0, closure); + gtk_accel_group_connect (group, GDK_KEY_f, GDK_CONTROL_MASK, 0, closure); gtk_window_add_accel_group (GTK_WINDOW(window), group); } From edbe29694d652c86ef73ff3e69318175cc3000d3 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 22:00:01 -0800 Subject: [PATCH 05/65] Drop GTK+ 2 --- configure.ac | 33 ++++----------------------------- gitg/Makefile.am | 3 +-- gitg/gitg-branch-actions.c | 4 ---- gitg/gitg-commit-view.c | 1 - gitg/gitg-dnd.c | 1 - gitg/gitg-stat-view.c | 1 - gitg/gitg-utils.c | 2 -- gitg/gitg-window.c | 2 -- gitg/gseal-gtk-compat.h | 38 -------------------------------------- 9 files changed, 5 insertions(+), 80 deletions(-) delete mode 100644 gitg/gseal-gtk-compat.h diff --git a/configure.ac b/configure.ac index 4782e994..471c730f 100644 --- a/configure.ac +++ b/configure.ac @@ -51,37 +51,12 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package]) AC_CHECK_LIB([m], [sinf]) -# Which gtk+ API version to compile against - -AC_MSG_CHECKING([which gtk+ version to compile against]) -AC_ARG_WITH([gtk], - [AS_HELP_STRING([--with-gtk=2.0|3.0],[which gtk+ version to compile against (default: 2.0)])], - [case "$with_gtk" in - 2.0|3.0) ;; - *) AC_MSG_ERROR([invalid gtk version specified]) ;; - esac], - [with_gtk=2.0]) -AC_MSG_RESULT([$with_gtk]) - -case "$with_gtk" in - 2.0) - GTK_REQUIRED=gtk+-2.0 - GTK_REQUIRED_VERSION=2.20.0 - GTKSOURCEVIEW_REQUIRED=gtksourceview-2.0 - GTKSOURCEVIEW_REQUIRED_VERSION=2.8.0 - ;; - 3.0) - GTK_REQUIRED=gtk+-3.0 - GTK_REQUIRED_VERSION=2.90.0 - GTKSOURCEVIEW_REQUIRED=gtksourceview-3.0 - GTKSOURCEVIEW_REQUIRED_VERSION=2.90.0 - ;; -esac - GLIB_REQUIRED_VERSION=2.26 +GTK_REQUIRED_VERSION=2.90.0 +GTKSOURCEVIEW_REQUIRED_VERSION=2.90.0 PKG_CHECK_MODULES(GITG, [ - $GTK_REQUIRED >= $GTK_REQUIRED_VERSION + gtk+-3.0 >= $GTK_REQUIRED_VERSION gthread-2.0 >= $GLIB_REQUIRED_VERSION glib-2.0 >= $GLIB_REQUIRED_VERSION gobject-2.0 >= $GLIB_REQUIRED_VERSION @@ -91,7 +66,7 @@ PKG_CHECK_MODULES(GITG, [ ]) PKG_CHECK_MODULES(PACKAGE, [ - $GTKSOURCEVIEW_REQUIRED >= $GTKSOURCEVIEW_REQUIRED_VERSION + gtksourceview-3.0 >= $GTKSOURCEVIEW_REQUIRED_VERSION gsettings-desktop-schemas ]) diff --git a/gitg/Makefile.am b/gitg/Makefile.am index 45222067..50dc17fa 100644 --- a/gitg/Makefile.am +++ b/gitg/Makefile.am @@ -30,8 +30,7 @@ NOINST_H_FILES = \ gitg-stat-view.h \ gitg-uri.h \ gitg-utils.h \ - gitg-window.h \ - gseal-gtk-compat.h + gitg-window.h gitg_SOURCES = \ $(BUILT_SOURCES) \ diff --git a/gitg/gitg-branch-actions.c b/gitg/gitg-branch-actions.c index d98be6b9..fd31b0f5 100644 --- a/gitg/gitg-branch-actions.c +++ b/gitg/gitg-branch-actions.c @@ -622,10 +622,6 @@ rename_dialog (GitgWindow *window, const gchar *oldname) "_Rename", GTK_RESPONSE_OK, NULL); -#if ! GTK_CHECK_VERSION(2, 22, 0) - gtk_dialog_set_has_separator (GTK_DIALOG (dlg), FALSE); -#endif - gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK); GtkWidget *box = gtk_hbox_new (FALSE, 6); diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index f1fe5fe6..9ab2ffea 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -31,7 +31,6 @@ #include "gitg-commit-view.h" #include "gitg-diff-view.h" #include "gitg-utils.h" -#include "gseal-gtk-compat.h" #define GITG_COMMIT_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GITG_TYPE_COMMIT_VIEW, GitgCommitViewPrivate)) #define CATEGORY_UNSTAGE_HUNK "CategoryUnstageHunk" diff --git a/gitg/gitg-dnd.c b/gitg/gitg-dnd.c index 2d0eff4a..fb908b90 100644 --- a/gitg/gitg-dnd.c +++ b/gitg/gitg-dnd.c @@ -26,7 +26,6 @@ #include "gitg-cell-renderer-path.h" #include "gitg-window.h" #include "gitg-branch-actions.h" -#include "gseal-gtk-compat.h" #include "gitg-utils.h" #include diff --git a/gitg/gitg-stat-view.c b/gitg/gitg-stat-view.c index d9c54cca..a04f9b24 100644 --- a/gitg/gitg-stat-view.c +++ b/gitg/gitg-stat-view.c @@ -3,7 +3,6 @@ #include "gitg-utils.h" #include #include -#include "gseal-gtk-compat.h" #define GITG_STAT_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GITG_TYPE_STAT_VIEW, GitgStatViewPrivate)) diff --git a/gitg/gitg-utils.c b/gitg/gitg-utils.c index dd0e1190..b51344c6 100644 --- a/gitg/gitg-utils.c +++ b/gitg/gitg-utils.c @@ -27,8 +27,6 @@ #include #include -#include "gseal-gtk-compat.h" - gchar * gitg_utils_get_content_type(GFile *file) { diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 0c550bdf..e13c2015 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -46,8 +46,6 @@ #include "gitg-activatable.h" #include "gitg-uri.h" -#include "gseal-gtk-compat.h" - #define DYNAMIC_ACTION_DATA_KEY "GitgDynamicActionDataKey" #define DYNAMIC_ACTION_DATA_REMOTE_KEY "GitgDynamicActionDataRemoteKey" #define DYNAMIC_ACTION_DATA_BRANCH_KEY "GitgDynamicActionDataBranchKey" diff --git a/gitg/gseal-gtk-compat.h b/gitg/gseal-gtk-compat.h deleted file mode 100644 index 27b6e4a9..00000000 --- a/gitg/gseal-gtk-compat.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */ -/* - * Copyright (C) 2009 Thomas H.P. Andersen , - * 2009 Javier Jardón - * - * This runtime is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1, or (at your option) - * any later version. - * - * This runtime is distributed in the hope runtime it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this runtime; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifndef GSEAL_GTK_COMPAT_H -#define GSEAL_GTK_COMPAT_H - -G_BEGIN_DECLS - -#if !GTK_CHECK_VERSION (2, 22, 0) -#define gdk_drag_context_list_targets(context) ((context)->targets) -#endif /* GTK < 2.22.0 */ -#if !GTK_CHECK_VERSION (2, 20, 0) -#define gtk_widget_get_mapped(widget) (GTK_WIDGET_MAPPED ((widget))) -#define gtk_widget_get_realized(widget) (GTK_WIDGET_REALIZED ((widget))) -#endif /* GTK < 2.20.0 */ - -G_END_DECLS - -#endif /* GSEAL_GTK_COMPAT_H */ - -/* ex:ts=8:noet: */ From 376449f345279dc2dada29bb5d13dd2153edddba Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:44:01 -0800 Subject: [PATCH 06/65] GtkObject is gone --- gitg/gitg-window.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index e13c2015..ce84ce58 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -1083,9 +1083,9 @@ gitg_window_delete_event (GtkWidget *widget, } static void -gitg_window_destroy (GtkObject *object) +gitg_window_destroy (GtkWidget *widget) { - GitgWindow *window = GITG_WINDOW(object); + GitgWindow *window = GITG_WINDOW(widget); if (!window->priv->destroy_has_run) { @@ -1103,9 +1103,9 @@ gitg_window_destroy (GtkObject *object) window->priv->destroy_has_run = TRUE; } - if (GTK_OBJECT_CLASS(parent_class)->destroy) + if (GTK_WIDGET_CLASS(parent_class)->destroy) { - GTK_OBJECT_CLASS(parent_class)->destroy (object); + GTK_WIDGET_CLASS(parent_class)->destroy (widget); } } @@ -1180,7 +1180,6 @@ static void gitg_window_class_init (GitgWindowClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkObjectClass *gtkobject_class = GTK_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GtkWindowClass *window_class = GTK_WINDOW_CLASS (klass); @@ -1188,8 +1187,8 @@ gitg_window_class_init (GitgWindowClass *klass) object_class->finalize = gitg_window_finalize; object_class->dispose = gitg_window_dispose; - gtkobject_class->destroy = gitg_window_destroy; + widget_class->destroy = gitg_window_destroy; widget_class->delete_event = gitg_window_delete_event; widget_class->window_state_event = gitg_window_window_state_event; window_class->set_focus = gitg_window_set_focus; From c06d2c1b9680a7e653b0526520c3e929f47f5a23 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:46:15 -0800 Subject: [PATCH 07/65] Don't set GtkAboutDialog url and email hook GtkAboutDialog already has default hooks that are just as good. --- gitg/gitg-window.c | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index ce84ce58..adf4bd7f 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -2205,31 +2205,6 @@ on_recent_open (GtkRecentChooser *chooser, g_object_unref (work_tree); } -static void -url_activate_hook (GtkAboutDialog *dialog, - gchar const *link, - gpointer data) -{ - gtk_show_uri (NULL, link, GDK_CURRENT_TIME, NULL); -} - -static void -email_activate_hook (GtkAboutDialog *dialog, - gchar const *link, - gpointer data) -{ - gchar *uri; - gchar *escaped; - - escaped = g_uri_escape_string (link, NULL, FALSE); - uri = g_strdup_printf ("mailto:%s", escaped); - - gtk_show_uri (NULL, uri, GDK_CURRENT_TIME, NULL); - - g_free (uri); - g_free (escaped); -} - void on_help_about (GtkAction *action, GitgWindow *window) @@ -2252,8 +2227,6 @@ on_help_about (GtkAction *action, "Foundation, Inc., 59 Temple Place, Suite 330,\n" "Boston, MA 02111-1307, USA."); - gtk_about_dialog_set_url_hook (url_activate_hook, NULL, NULL); - gtk_about_dialog_set_email_hook (email_activate_hook, NULL, NULL); gchar *path = gitg_dirs_get_data_filename ("icons", "gitg.svg", NULL); GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (path, NULL); From b9b6ceac11d0b83b22f48d04ed912ec3555d88dd Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:46:54 -0800 Subject: [PATCH 08/65] Use GtkScrollable --- gitg/gitg-dnd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitg/gitg-dnd.c b/gitg/gitg-dnd.c index fb908b90..58b7af70 100644 --- a/gitg/gitg-dnd.c +++ b/gitg/gitg-dnd.c @@ -531,7 +531,7 @@ vertical_autoscroll (GitgDndData *data) } } - GtkAdjustment *adj = gtk_tree_view_get_vadjustment (data->tree_view); + GtkAdjustment *adj = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (data->tree_view)); value = CLAMP (gtk_adjustment_get_value (adj) + offset, 0.0, gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj)); From 1136c7e1f466e06562ebad5f8e33243c736d1b3c Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:50:25 -0800 Subject: [PATCH 09/65] Fix the details panel's info from expanding --- gitg/gitg-revision-details-panel.ui | 1 + 1 file changed, 1 insertion(+) diff --git a/gitg/gitg-revision-details-panel.ui b/gitg/gitg-revision-details-panel.ui index 73550e0f..863d179b 100644 --- a/gitg/gitg-revision-details-panel.ui +++ b/gitg/gitg-revision-details-panel.ui @@ -12,6 +12,7 @@ 2 6 6 + False True From 4c6a0280411398c3b548478bdb0476ee1e1fe8cf Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:55:06 -0800 Subject: [PATCH 10/65] GdkDrawable is gone --- gitg/gitg-commit-view.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index 9ab2ffea..7708f5ed 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -969,7 +969,8 @@ get_info_at_pointer (GitgCommitView *view, GdkWindow *win = gtk_text_view_get_window (textview, GTK_TEXT_WINDOW_TEXT); gdk_window_get_pointer (win, &x, &y, NULL); - gdk_drawable_get_size (GDK_DRAWABLE (win), &width, &height); + width = gdk_window_get_width (win); + height = gdk_window_get_height (win); if (x < 0 || y < 0 || x > width || y > height) { From 4398a10f6b7392bd36019e6aebe2a3b34b157900 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:56:23 -0800 Subject: [PATCH 11/65] GtkWindow now has the resize grip not the GtkStatusbar --- gitg/gitg-window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index adf4bd7f..5b81a49b 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -1123,7 +1123,7 @@ gitg_window_window_state_event (GtkWidget *widget, show = !(event->new_window_state & (GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_FULLSCREEN)); - gtk_statusbar_set_has_resize_grip (window->priv->statusbar, show); + gtk_window_set_has_resize_grip (GTK_WINDOW (window), show); } /* Save the window state */ From ec29ed37c47bf3aefca0989d50a2635ab6ca3a57 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:58:12 -0800 Subject: [PATCH 12/65] GTK+ 3's GtkAboutDialog choose to be ugly by default. Explicitly set the website label. --- gitg/gitg-window.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 5b81a49b..de3b6296 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -2245,6 +2245,7 @@ on_help_about (GtkAction *action, "comments", _ (comments), "version", VERSION, "website", "http://trac.novowork.com/gitg", + "website-label", "trac.novowork.com/gitg", "logo", pixbuf, "license", _ (license), NULL); From 018b7d5af519f5859d670bbef64c96291df2c6cc Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 20:59:45 -0800 Subject: [PATCH 13/65] Set GtkAboutDialog's license-type instead of our own license. --- gitg/gitg-window.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index de3b6296..67bda634 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -2212,21 +2212,6 @@ on_help_about (GtkAction *action, static gchar const copyright[] = "Copyright \xc2\xa9 2009 Jesse van den Kieboom"; static gchar const *authors[] = {"Jesse van den Kieboom ", NULL}; static gchar const *comments = N_ ("gitg is a git repository viewer for gtk+/GNOME"); - static gchar const *license = N_ ("This program is free software; you can redistribute it and/or modify\n" - "it under the terms of the GNU General Public License as published by\n" - "the Free Software Foundation; either version 2 of the License, or\n" - "(at your option) any later version.\n" - "\n" - "This program is distributed in the hope that it will be useful,\n" - "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - "GNU General Public License for more details.\n" - "\n" - "You should have received a copy of the GNU General Public License\n" - "along with this program; if not, write to the Free Software\n" - "Foundation, Inc., 59 Temple Place, Suite 330,\n" - "Boston, MA 02111-1307, USA."); - gchar *path = gitg_dirs_get_data_filename ("icons", "gitg.svg", NULL); GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file (path, NULL); @@ -2247,7 +2232,7 @@ on_help_about (GtkAction *action, "website", "http://trac.novowork.com/gitg", "website-label", "trac.novowork.com/gitg", "logo", pixbuf, - "license", _ (license), + "license-type", GTK_LICENSE_GPL_2_0, NULL); if (pixbuf) From 4969e8abde93addf7045a8081ea20a24104877d2 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 21:03:38 -0800 Subject: [PATCH 14/65] Dont use gtk_widget_size_request --- gitg/gitg-utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gitg/gitg-utils.c b/gitg/gitg-utils.c index b51344c6..9a9a0b9a 100644 --- a/gitg/gitg-utils.c +++ b/gitg/gitg-utils.c @@ -218,7 +218,7 @@ gitg_utils_menu_position_under_widget (GtkMenu *menu, GtkRequisition requisition; gdk_window_get_origin (gtk_widget_get_window (w), x, y); - gtk_widget_size_request (GTK_WIDGET (menu), &requisition); + gtk_widget_get_preferred_size (GTK_WIDGET (menu), &requisition, NULL); GtkAllocation alloc; gtk_widget_get_allocation (w, &alloc); @@ -273,7 +273,7 @@ gitg_utils_menu_position_under_tree_view (GtkMenu *menu, if (gtk_widget_get_direction (GTK_WIDGET (tree)) == GTK_TEXT_DIR_RTL) { GtkRequisition requisition; - gtk_widget_size_request (GTK_WIDGET (menu), &requisition); + gtk_widget_get_preferred_size (GTK_WIDGET (menu), &requisition, NULL); *x += rect.width - requisition.width; } } From 95566b34e13bb7429961f96b923e1d6591a028a7 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 21:04:07 -0800 Subject: [PATCH 15/65] Don't use gtk_cell_renderer_get_size --- gitg/gitg-utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gitg/gitg-utils.c b/gitg/gitg-utils.c index 9a9a0b9a..ad748b05 100644 --- a/gitg/gitg-utils.c +++ b/gitg/gitg-utils.c @@ -157,7 +157,7 @@ gitg_utils_set_monospace_font(GtkWidget *widget) if (description) { - gtk_widget_modify_font(widget, description); + gtk_widget_override_font(widget, description); pango_font_description_free(description); } } @@ -370,7 +370,7 @@ gitg_utils_find_cell_at_pos (GtkTreeView *tree_view, GtkTreeViewColumn *column, continue; } - gtk_cell_renderer_get_size (renderer, GTK_WIDGET (tree_view), NULL, NULL, NULL, &width, 0); + gtk_cell_renderer_get_preferred_width (renderer, GTK_WIDGET (tree_view), &width, NULL); if (x >= start && x <= start + width) { From 20a800418e5342794b76e06e113ad5e72e615e01 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 21:37:32 -0800 Subject: [PATCH 16/65] Port to GtkWidget's new "draw" signal --- gitg/gitg-cell-renderer-path.c | 5 +- gitg/gitg-diff-line-renderer.c | 95 ++++++++++++++++------------------ gitg/gitg-diff-view.c | 14 ++--- gitg/gitg-stat-view.c | 17 ++---- 4 files changed, 58 insertions(+), 73 deletions(-) diff --git a/gitg/gitg-cell-renderer-path.c b/gitg/gitg-cell-renderer-path.c index e4f7fd43..0560ecf5 100644 --- a/gitg/gitg-cell-renderer-path.c +++ b/gitg/gitg-cell-renderer-path.c @@ -324,8 +324,6 @@ renderer_render(GtkCellRenderer *renderer, GdkDrawable *window, GtkWidget *widge self->priv->last_height = area->height; - cairo_t *cr = gdk_cairo_create(window); - gdk_cairo_rectangle (cr, area); cairo_clip(cr); @@ -336,13 +334,12 @@ renderer_render(GtkCellRenderer *renderer, GdkDrawable *window, GtkWidget *widge /* draw labels */ draw_labels(self, widget, cr, area); - cairo_destroy(cr); area->x += total_width(self, widget); cell_area->x += total_width(self, widget); if (GTK_CELL_RENDERER_CLASS(parent_class)->render) - GTK_CELL_RENDERER_CLASS(parent_class)->render(renderer, window, widget, area, cell_area, expose_area, flags); + GTK_CELL_RENDERER_CLASS(parent_class)->render(renderer, cr, widget, area, cell_area, flags); } static void diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c index 796bc2ac..7080fe21 100644 --- a/gitg/gitg-diff-line-renderer.c +++ b/gitg/gitg-diff-line-renderer.c @@ -122,7 +122,7 @@ darken_or_lighten (cairo_t *ctx, static void render_label (GitgDiffLineRenderer *lr, - GdkDrawable *window, + cairo_t *ctx, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, @@ -146,10 +146,7 @@ render_label (GitgDiffLineRenderer *lr, style = gtk_widget_get_style (widget); state = gtk_widget_get_state (widget); - cairo_t *ctx = gdk_cairo_create (window); - gdk_cairo_rectangle (ctx, expose_area); - cairo_clip (ctx); gdk_cairo_set_source_color (ctx, &(style->fg[state])); @@ -175,23 +172,21 @@ render_label (GitgDiffLineRenderer *lr, pango_cairo_show_layout (ctx, layout); - cairo_destroy (ctx); - - /*gtk_paint_layout (style, - window, - state, - FALSE, - NULL, - widget, - NULL, - cell_area->x + cell_area->width / 2, - cell_area->y, - layout);*/ + /*gtk_draw_layout (style, + ctx, + state, + FALSE, + NULL, + widget, + NULL, + cell_area->x + cell_area->width / 2, + cell_area->y, + layout);*/ } static void render_lines (GitgDiffLineRenderer *lr, - GdkDrawable *window, + cairo_t *ctx, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, @@ -233,45 +228,45 @@ render_lines (GitgDiffLineRenderer *lr, pango_layout_set_text (layout, old_str, -1); style = gtk_widget_get_style (widget); - gtk_paint_layout (style, - window, - gtk_widget_get_state (widget), - FALSE, - NULL, - widget, - NULL, - cell_area->x + cell_area->width / 2 - 1 - xpad, - cell_area->y, - layout); - - pango_layout_set_text (layout, new_str, -1); - gtk_paint_layout (style, - window, - gtk_widget_get_state (widget), - FALSE, - NULL, - widget, - NULL, - cell_area->x + cell_area->width - xpad, - cell_area->y, - layout); - - g_object_unref (layout); - - gtk_paint_vline (style, - window, + gtk_draw_layout (style, + ctx, gtk_widget_get_state (widget), + FALSE, NULL, widget, NULL, - background_area->y, - background_area->y + background_area->height, - background_area->x + background_area->width / 2); + cell_area->x + cell_area->width / 2 - 1 - xpad, + cell_area->y, + layout); + + pango_layout_set_text (layout, new_str, -1); + gtk_draw_layout (style, + ctx, + gtk_widget_get_state (widget), + FALSE, + NULL, + widget, + NULL, + cell_area->x + cell_area->width - xpad, + cell_area->y, + layout); + + g_object_unref (layout); + + gtk_draw_vline (style, + ctx, + gtk_widget_get_state (widget), + NULL, + widget, + NULL, + background_area->y, + background_area->y + background_area->height, + background_area->x + background_area->width / 2); } static void gitg_diff_line_renderer_render_impl (GtkCellRenderer *cell, - GdkDrawable *window, + cairo_t *ctx, GtkWidget *widget, GdkRectangle *background_area, GdkRectangle *cell_area, @@ -283,7 +278,7 @@ gitg_diff_line_renderer_render_impl (GtkCellRenderer *cell, if (lr->priv->label) { render_label (lr, - window, + ctx, widget, background_area, cell_area, @@ -293,7 +288,7 @@ gitg_diff_line_renderer_render_impl (GtkCellRenderer *cell, else { render_lines (lr, - window, + ctx, widget, background_area, cell_area, diff --git a/gitg/gitg-diff-view.c b/gitg/gitg-diff-view.c index 847aa259..63d36959 100644 --- a/gitg/gitg-diff-view.c +++ b/gitg/gitg-diff-view.c @@ -145,7 +145,7 @@ struct _GitgDiffViewPrivate G_DEFINE_TYPE (GitgDiffView, gitg_diff_view, GTK_TYPE_SOURCE_VIEW) -static gboolean gitg_diff_view_expose (GtkWidget *widget, GdkEventExpose *event); +static gboolean gitg_diff_view_draw (GtkWidget *widget, cairo_t *cr); static guint diff_view_signals[NUM_SIGNALS] = {0,}; static void @@ -314,7 +314,7 @@ gitg_diff_view_class_init (GitgDiffViewClass *klass) object_class->constructed = gitg_diff_view_constructed; - widget_class->expose_event = gitg_diff_view_expose; + widget_class->draw = gitg_diff_view_draw; diff_view_signals[HEADER_ADDED] = g_signal_new ("header-added", @@ -855,20 +855,20 @@ line_renderer_data_func (GtkSourceGutter *gutter, } static gint -gitg_diff_view_expose (GtkWidget *widget, - GdkEventExpose *event) +gitg_diff_view_draw (GtkWidget *widget, + cairo_t *cr) { GitgDiffView *view = GITG_DIFF_VIEW (widget); - /* Prepare for new round of expose on the line renderer */ + /* Prepare for new round of draw on the line renderer */ view->priv->lines_current_region = NULL; view->priv->lines_previous_line = -1; view->priv->lines_counters[0] = 0; view->priv->lines_counters[1] = 0; - if (GTK_WIDGET_CLASS (gitg_diff_view_parent_class)->expose_event) + if (GTK_WIDGET_CLASS (gitg_diff_view_parent_class)->draw) { - return GTK_WIDGET_CLASS (gitg_diff_view_parent_class)->expose_event (widget, event); + return GTK_WIDGET_CLASS (gitg_diff_view_parent_class)->draw (widget, cr); } else { diff --git a/gitg/gitg-stat-view.c b/gitg/gitg-stat-view.c index a04f9b24..d0b8662a 100644 --- a/gitg/gitg-stat-view.c +++ b/gitg/gitg-stat-view.c @@ -254,9 +254,9 @@ draw_stat (GitgStatView *view, } static gboolean -gitg_stat_view_expose (GtkWidget *widget, GdkEventExpose *event) +gitg_stat_view_draw (GtkWidget *widget, + cairo_t *ctx) { - cairo_t *ctx; GdkRectangle alloc; guint added_width; guint removed_width; @@ -264,9 +264,9 @@ gitg_stat_view_expose (GtkWidget *widget, GdkEventExpose *event) GitgStatView *view; guint padding; - if (GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->expose_event) + if (GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->draw) { - GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->expose_event (widget, event); + GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->draw (widget, ctx); } view = GITG_STAT_VIEW (widget); @@ -286,11 +286,6 @@ gitg_stat_view_expose (GtkWidget *widget, GdkEventExpose *event) padding = 2; } - ctx = gdk_cairo_create (event->window); - - gdk_cairo_rectangle (ctx, &event->area); - cairo_clip (ctx); - gtk_widget_get_allocation (widget, &alloc); update_gradients (view, &alloc); @@ -328,8 +323,6 @@ gitg_stat_view_expose (GtkWidget *widget, GdkEventExpose *event) alloc.height); } - cairo_destroy (ctx); - return TRUE; } @@ -412,8 +405,8 @@ gitg_stat_view_class_init (GitgStatViewClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - widget_class->expose_event = gitg_stat_view_expose; widget_class->style_set = gitg_stat_view_style_set; + widget_class->draw = gitg_stat_view_draw; widget_class->realize = gitg_stat_view_realize; widget_class->configure_event = gitg_stat_view_configure; From 0e71d021270a829b283eb2a82ec4f892f65ff9cc Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 2 Jan 2011 21:38:09 -0800 Subject: [PATCH 17/65] Port to GtkStyleContext and GdkRGBA --- gitg/gitg-diff-line-renderer.c | 81 ++++++++++++++-------------------- gitg/gitg-repository-dialog.c | 9 +++- gitg/gitg-stat-view.c | 39 ++++++++-------- 3 files changed, 58 insertions(+), 71 deletions(-) diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c index 7080fe21..8da7f2bc 100644 --- a/gitg/gitg-diff-line-renderer.c +++ b/gitg/gitg-diff-line-renderer.c @@ -95,14 +95,14 @@ gitg_diff_line_renderer_get_property (GObject *object, } static void -darken_or_lighten (cairo_t *ctx, - GdkColor const *color) +darken_or_lighten (cairo_t *ctx, + GdkRGBA const *color) { float r, g, b; - r = color->red / 65535.0; - g = color->green / 65535.0; - b = color->blue / 65535.0; + r = color->red; + g = color->green; + b = color->blue; if ((r + g + b) / 3 > 0.5) { @@ -130,9 +130,10 @@ render_label (GitgDiffLineRenderer *lr, GtkCellRendererState flags) { PangoLayout *layout; - GtkStyle *style; + GtkStyleContext *style_context; GtkStateType state; gint pixel_height; + GdkRGBA fg_color, bg_color; layout = gtk_widget_create_pango_layout (widget, ""); @@ -143,12 +144,13 @@ render_label (GitgDiffLineRenderer *lr, pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER); - style = gtk_widget_get_style (widget); + style_context = gtk_widget_get_style_context (widget); state = gtk_widget_get_state (widget); + gtk_style_context_get_color (style_context, state, &fg_color); + gtk_style_context_get_background_color (style_context, state, &bg_color); - - gdk_cairo_set_source_color (ctx, &(style->fg[state])); + gdk_cairo_set_source_rgba (ctx, &fg_color); gitg_utils_rounded_rectangle (ctx, cell_area->x + 0.5, @@ -159,12 +161,12 @@ render_label (GitgDiffLineRenderer *lr, cairo_fill_preserve (ctx); - darken_or_lighten (ctx, &(style->fg[state])); + darken_or_lighten (ctx, &fg_color); cairo_set_line_width (ctx, 1); cairo_stroke (ctx); - gdk_cairo_set_source_color (ctx, &(style->base[state])); + gdk_cairo_set_source_rgba (ctx, &bg_color); cairo_move_to (ctx, cell_area->x + cell_area->width / 2, @@ -172,13 +174,8 @@ render_label (GitgDiffLineRenderer *lr, pango_cairo_show_layout (ctx, layout); - /*gtk_draw_layout (style, + /*gtk_render_layout (style_context, ctx, - state, - FALSE, - NULL, - widget, - NULL, cell_area->x + cell_area->width / 2, cell_area->y, layout);*/ @@ -198,7 +195,8 @@ render_lines (GitgDiffLineRenderer *lr, gchar new_str[16]; guint xpad; guint ypad; - GtkStyle *style; + GtkWidget *widget; + GtkStyleContext *style_context; PangoLayout *layout = gtk_widget_create_pango_layout (widget, ""); pango_layout_set_width (layout, cell_area->width / 2); @@ -226,42 +224,29 @@ render_lines (GitgDiffLineRenderer *lr, g_object_get (lr, "xpad", &xpad, "ypad", &ypad, NULL); pango_layout_set_text (layout, old_str, -1); - style = gtk_widget_get_style (widget); + style_context = gtk_widget_get_style_context (widget); - gtk_draw_layout (style, - ctx, - gtk_widget_get_state (widget), - FALSE, - NULL, - widget, - NULL, - cell_area->x + cell_area->width / 2 - 1 - xpad, - cell_area->y, - layout); + gtk_render_layout (style_context, + ctx, + cell_area->x + cell_area->width / 2 - 1 - xpad, + cell_area->y, + layout); pango_layout_set_text (layout, new_str, -1); - gtk_draw_layout (style, - ctx, - gtk_widget_get_state (widget), - FALSE, - NULL, - widget, - NULL, - cell_area->x + cell_area->width - xpad, - cell_area->y, - layout); + gtk_render_layout (style_context, + ctx, + cell_area->x + cell_area->width - xpad, + cell_area->y, + layout); g_object_unref (layout); - gtk_draw_vline (style, - ctx, - gtk_widget_get_state (widget), - NULL, - widget, - NULL, - background_area->y, - background_area->y + background_area->height, - background_area->x + background_area->width / 2); + gtk_render_line (style_context, + ctx, + background_area->x + background_area->width / 2, + background_area->y, + background_area->y + background_area->height, + background_area->x + background_area->width / 2); } static void diff --git a/gitg/gitg-repository-dialog.c b/gitg/gitg-repository-dialog.c index 0c4652c9..11921195 100644 --- a/gitg/gitg-repository-dialog.c +++ b/gitg/gitg-repository-dialog.c @@ -304,6 +304,9 @@ on_fetch_begin_loading (GitgShell *shell, FetchInfo *info) { GtkTreeIter iter; GtkTreePath *path = gtk_tree_row_reference_get_path (info->reference); + GtkStyleContext *style_context; + GValue cycle_duration = {0,}; + GValue num_steps = {0,}; gtk_tree_model_get_iter (GTK_TREE_MODEL (info->dialog->priv->list_store_remotes), &iter, @@ -317,8 +320,10 @@ on_fetch_begin_loading (GitgShell *shell, FetchInfo *info) g_value_init (&cycle_duration, G_TYPE_UINT); g_value_init (&num_steps, G_TYPE_UINT); - gtk_style_get_style_property (style, GTK_TYPE_SPINNER, "num-steps", &num_steps); - gtk_style_get_style_property (style, GTK_TYPE_SPINNER, "cycle-duration", &cycle_duration); + style_context = gtk_widget_get_style_context (GTK_WIDGET (info->dialog->priv->tree_view_remotes)); + + gtk_style_context_get_style_property (style_context, "num-steps", &num_steps); + gtk_style_context_get_style_property (style_context, "cycle-duration", &cycle_duration); info->pulse_id = g_timeout_add (g_value_get_uint (&cycle_duration) / g_value_get_uint (&num_steps), diff --git a/gitg/gitg-stat-view.c b/gitg/gitg-stat-view.c index d0b8662a..d22573d6 100644 --- a/gitg/gitg-stat-view.c +++ b/gitg/gitg-stat-view.c @@ -63,9 +63,9 @@ gitg_stat_view_finalize (GObject *object) static void update_colors (GitgStatView *view) { - GtkStyle *style; - GdkColor bg_color; - gdouble r, g, b; + GtkStyleContext *style_context; + GtkStateFlags state; + GdkRGBA bg_color; gdouble hue, sat, val; if (!gtk_widget_get_realized (GTK_WIDGET (view))) @@ -73,14 +73,11 @@ update_colors (GitgStatView *view) return; } - style = gtk_widget_get_style (GTK_WIDGET (view)); - bg_color = style->base[gtk_widget_get_state (GTK_WIDGET (view))]; + style_context = gtk_widget_get_style_context (GTK_WIDGET (view)); + state = gtk_widget_get_state (GTK_WIDGET (view)); + gtk_style_context_get_background_color (style_context, state, &bg_color); - r = bg_color.red / 65535.0; - g = bg_color.green / 65535.0; - b = bg_color.blue / 65535.0; - - gtk_rgb_to_hsv (r, g, b, &hue, &sat, &val); + gtk_rgb_to_hsv (bg_color.red, bg_color.green, bg_color.blue, &hue, &sat, &val); sat = MIN(sat * 0.5 + 0.5, 1); val = MIN((pow(val + 1, 3) - 1) / 7 * 0.6 + 0.2, 1); @@ -116,21 +113,21 @@ gitg_stat_view_realize (GtkWidget *widget) static void update_styles (GitgStatView *view) { - gtk_style_get (gtk_widget_get_style (GTK_WIDGET (view)), - GITG_TYPE_STAT_VIEW, - "radius", &view->priv->radius, - "stat-padding", &view->priv->stat_padding, - "show-lines", &view->priv->show_lines, - "lines-spacing", &view->priv->lines_spacing, - NULL); + gtk_style_context_get_style (gtk_widget_get_style_context (GTK_WIDGET (view)), + gtk_widget_get_state (GTK_WIDGET (view)), + "radius", &view->priv->radius, + "stat-padding", &view->priv->stat_padding, + "show-lines", &view->priv->show_lines, + "lines-spacing", &view->priv->lines_spacing, + NULL); } static void -gitg_stat_view_style_set (GtkWidget *widget, GtkStyle *prev_style) +gitg_stat_view_style_updated (GtkWidget *widget) { - if (GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->style_set) + if (GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->style_updated) { - GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->style_set (widget, prev_style); + GTK_WIDGET_CLASS (gitg_stat_view_parent_class)->style_updated (widget); } update_colors (GITG_STAT_VIEW (widget)); @@ -405,8 +402,8 @@ gitg_stat_view_class_init (GitgStatViewClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - widget_class->style_set = gitg_stat_view_style_set; widget_class->draw = gitg_stat_view_draw; + widget_class->style_updated = gitg_stat_view_style_updated; widget_class->realize = gitg_stat_view_realize; widget_class->configure_event = gitg_stat_view_configure; From ebddf2ab7365f2e8922b963298217f45eb119598 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sat, 22 Jan 2011 15:43:42 -0800 Subject: [PATCH 18/65] Port to GtkSourceMarkAttributes --- configure.ac | 2 +- gitg/gitg-commit-view.c | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 471c730f..1b075cff 100644 --- a/configure.ac +++ b/configure.ac @@ -53,7 +53,7 @@ AC_CHECK_LIB([m], [sinf]) GLIB_REQUIRED_VERSION=2.26 GTK_REQUIRED_VERSION=2.90.0 -GTKSOURCEVIEW_REQUIRED_VERSION=2.90.0 +GTKSOURCEVIEW_REQUIRED_VERSION=2.91.4 PKG_CHECK_MODULES(GITG, [ gtk+-3.0 >= $GTK_REQUIRED_VERSION diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index 7708f5ed..ccdc18cd 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -1365,6 +1365,8 @@ on_tag_added (GtkTextTagTable *table, static void gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder) { + GtkSourceMarkAttributes *attrs; + if (parent_iface.parser_finished) parent_iface.parser_finished(buildable, builder); @@ -1430,16 +1432,28 @@ gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder) if (pixbuf) { - gtk_source_view_set_mark_category_icon_from_pixbuf(self->priv->changes_view, CATEGORY_STAGE_HUNK, pixbuf); - g_object_unref(pixbuf); + attrs = gtk_source_mark_attributes_new (); + gtk_source_mark_attributes_set_pixbuf (attrs, pixbuf); + + gtk_source_view_set_mark_attributes (self->priv->changes_view, + CATEGORY_STAGE_HUNK, + attrs, 1); + + g_object_unref (pixbuf); } pixbuf = gtk_icon_theme_load_icon(theme, GTK_STOCK_REMOVE, 12, GTK_ICON_LOOKUP_USE_BUILTIN, NULL); if (pixbuf) { - gtk_source_view_set_mark_category_icon_from_pixbuf(self->priv->changes_view, CATEGORY_UNSTAGE_HUNK, pixbuf); - g_object_unref(pixbuf); + attrs = gtk_source_mark_attributes_new (); + gtk_source_mark_attributes_set_pixbuf (attrs, pixbuf); + + gtk_source_view_set_mark_attributes (self->priv->changes_view, + CATEGORY_UNSTAGE_HUNK, + attrs, 2); + + g_object_unref (pixbuf); } gitg_utils_set_monospace_font(GTK_WIDGET(self->priv->changes_view)); From 33dfcf00304851c22eae18e97ba1da94865c3b5b Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sat, 22 Jan 2011 15:47:09 -0800 Subject: [PATCH 19/65] Fix GitgCellRendererPath --- gitg/gitg-cell-renderer-path.c | 28 ++++++++++++++-------------- gitg/gitg-label-renderer.c | 2 +- gitg/gitg-label-renderer.h | 2 +- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gitg/gitg-cell-renderer-path.c b/gitg/gitg-cell-renderer-path.c index 0560ecf5..9f547b18 100644 --- a/gitg/gitg-cell-renderer-path.c +++ b/gitg/gitg-cell-renderer-path.c @@ -113,7 +113,7 @@ gitg_cell_renderer_path_finalize(GObject *object) } static void -renderer_get_size(GtkCellRenderer *renderer, GtkWidget *widget, GdkRectangle *area, gint *xoffset, gint *yoffset, gint *width, gint *height) +renderer_get_size(GtkCellRenderer *renderer, GtkWidget *widget, const GdkRectangle *area, gint *xoffset, gint *yoffset, gint *width, gint *height) { GitgCellRendererPath *self = GITG_CELL_RENDERER_PATH(renderer); @@ -131,7 +131,7 @@ renderer_get_size(GtkCellRenderer *renderer, GtkWidget *widget, GdkRectangle *ar } static void -draw_arrow(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area, gint8 laneidx, gboolean top) +draw_arrow(GitgCellRendererPath *self, cairo_t *cr, const GdkRectangle *area, gint8 laneidx, gboolean top) { gdouble cw = self->priv->lane_width; gdouble xpos = area->x + laneidx * cw + cw / 2.0; @@ -154,7 +154,7 @@ draw_arrow(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area, gint8 la } static void -draw_paths_real(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area, GitgRevision *revision, gdouble yoffset) +draw_paths_real(GitgCellRendererPath *self, cairo_t *cr, const GdkRectangle *area, GitgRevision *revision, gdouble yoffset) { if (!revision) return; @@ -190,19 +190,19 @@ draw_paths_real(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area, Git } static void -draw_top_paths(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area) +draw_top_paths(GitgCellRendererPath *self, cairo_t *cr, const GdkRectangle *area) { draw_paths_real(self, cr, area, self->priv->revision, -1); } static void -draw_bottom_paths(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area) +draw_bottom_paths(GitgCellRendererPath *self, cairo_t *cr, const GdkRectangle *area) { draw_paths_real(self, cr, area, self->priv->next_revision, 1); } static void -draw_arrows(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area) +draw_arrows(GitgCellRendererPath *self, cairo_t *cr, const GdkRectangle *area) { GSList *item; gint8 to = 0; @@ -222,7 +222,7 @@ draw_arrows(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area) } static void -draw_paths(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area) +draw_paths(GitgCellRendererPath *self, cairo_t *cr, const GdkRectangle *area) { cairo_set_line_width(cr, 2); //cairo_set_source_rgb(cr, 0.45, 0.6, 0.74); @@ -234,7 +234,7 @@ draw_paths(GitgCellRendererPath *self, cairo_t *cr, GdkRectangle *area) } static void -draw_labels(GitgCellRendererPath *self, GtkWidget *widget, cairo_t *context, GdkRectangle *area) +draw_labels(GitgCellRendererPath *self, GtkWidget *widget, cairo_t *context, const GdkRectangle *area) { gint offset = num_lanes(self) * self->priv->lane_width; PangoFontDescription *font; @@ -249,7 +249,7 @@ draw_labels(GitgCellRendererPath *self, GtkWidget *widget, cairo_t *context, Gdk } static void -draw_indicator_triangle(GitgCellRendererPath *self, GitgLane *lane, cairo_t *context, GdkRectangle *area) +draw_indicator_triangle(GitgCellRendererPath *self, GitgLane *lane, cairo_t *context, const GdkRectangle *area) { gdouble offset = gitg_revision_get_mylane(self->priv->revision) * self->priv->lane_width + (self->priv->lane_width - self->priv->triangle_width) / 2.0; gdouble radius = self->priv->triangle_width / 2.0; @@ -281,7 +281,7 @@ draw_indicator_triangle(GitgCellRendererPath *self, GitgLane *lane, cairo_t *con } static void -draw_indicator_circle(GitgCellRendererPath *self, GitgLane *lane, cairo_t *context, GdkRectangle *area) +draw_indicator_circle(GitgCellRendererPath *self, GitgLane *lane, cairo_t *context, const GdkRectangle *area) { gdouble offset = gitg_revision_get_mylane(self->priv->revision) * self->priv->lane_width + (self->priv->lane_width - self->priv->dot_width) / 2.0; gdouble radius = self->priv->dot_width / 2.0; @@ -307,7 +307,7 @@ draw_indicator_circle(GitgCellRendererPath *self, GitgLane *lane, cairo_t *conte } static void -draw_indicator(GitgCellRendererPath *self, cairo_t *context, GdkRectangle *area) +draw_indicator(GitgCellRendererPath *self, cairo_t *context, const GdkRectangle *area) { GitgLane *lane = gitg_revision_get_lane(self->priv->revision); @@ -318,7 +318,7 @@ draw_indicator(GitgCellRendererPath *self, cairo_t *context, GdkRectangle *area) } static void -renderer_render(GtkCellRenderer *renderer, GdkDrawable *window, GtkWidget *widget, GdkRectangle *area, GdkRectangle *cell_area, GdkRectangle *expose_area, GtkCellRendererState flags) +renderer_render(GtkCellRenderer *renderer, cairo_t *cr, GtkWidget *widget, const GdkRectangle *area, const GdkRectangle *cell_area, GtkCellRendererState flags) { GitgCellRendererPath *self = GITG_CELL_RENDERER_PATH(renderer); @@ -335,8 +335,8 @@ renderer_render(GtkCellRenderer *renderer, GdkDrawable *window, GtkWidget *widge /* draw labels */ draw_labels(self, widget, cr, area); - area->x += total_width(self, widget); - cell_area->x += total_width(self, widget); + ((GdkRectangle *) area)->x += total_width(self, widget); + ((GdkRectangle *) cell_area)->x += total_width(self, widget); if (GTK_CELL_RENDERER_CLASS(parent_class)->render) GTK_CELL_RENDERER_CLASS(parent_class)->render(renderer, cr, widget, area, cell_area, flags); diff --git a/gitg/gitg-label-renderer.c b/gitg/gitg-label-renderer.c index 39265efb..cde05a67 100644 --- a/gitg/gitg-label-renderer.c +++ b/gitg/gitg-label-renderer.c @@ -184,7 +184,7 @@ render_label (cairo_t *context, PangoLayout *layout, GitgRef *ref, gint x, gint } void -gitg_label_renderer_draw(GtkWidget *widget, PangoFontDescription *description, cairo_t *context, GSList *labels, GdkRectangle *area) +gitg_label_renderer_draw(GtkWidget *widget, PangoFontDescription *description, cairo_t *context, GSList *labels, const GdkRectangle *area) { GSList *item; double pos = MARGIN + 0.5; diff --git a/gitg/gitg-label-renderer.h b/gitg/gitg-label-renderer.h index 595e03ee..7fe98c36 100644 --- a/gitg/gitg-label-renderer.h +++ b/gitg/gitg-label-renderer.h @@ -28,7 +28,7 @@ #include gint gitg_label_renderer_width(GtkWidget *widget, PangoFontDescription *description, GSList *labels); -void gitg_label_renderer_draw(GtkWidget *widget, PangoFontDescription *description, cairo_t *context, GSList *labels, GdkRectangle *area); +void gitg_label_renderer_draw(GtkWidget *widget, PangoFontDescription *description, cairo_t *context, GSList *labels, const GdkRectangle *area); GitgRef *gitg_label_renderer_get_ref_at_pos (GtkWidget *widget, PangoFontDescription *description, GSList *labels, gint x, gint *hot_x); From 9bcfa1327dbc8fa586f4538fa58991fc2c97ec0c Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sat, 22 Jan 2011 15:47:33 -0800 Subject: [PATCH 20/65] Make GitgDiffLineRenderer compile --- gitg/gitg-diff-line-renderer.c | 140 ++++++++++++++++++++++----------- gitg/gitg-diff-line-renderer.h | 6 +- gitg/gitg-diff-view.c | 57 ++++++++------ 3 files changed, 131 insertions(+), 72 deletions(-) diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c index 8da7f2bc..8a1805a7 100644 --- a/gitg/gitg-diff-line-renderer.c +++ b/gitg/gitg-diff-line-renderer.c @@ -41,7 +41,7 @@ struct _GitgDiffLineRendererPrivate gchar *label; }; -G_DEFINE_TYPE (GitgDiffLineRenderer, gitg_diff_line_renderer, GTK_TYPE_CELL_RENDERER) +G_DEFINE_TYPE (GitgDiffLineRenderer, gitg_diff_line_renderer, GTK_TYPE_SOURCE_GUTTER_RENDERER) static void gitg_diff_line_renderer_set_property (GObject *object, @@ -94,6 +94,36 @@ gitg_diff_line_renderer_get_property (GObject *object, } } +static void +gitg_diff_line_renderer_constructed (GObject *object) +{ + /*GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object);*/ + + + + if (G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed) + { + G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed (object); + } +} + +static void +gitg_diff_line_renderer_dispose (GObject *object) +{ + GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object); + + if (self->priv->label != NULL) + { + g_free (self->priv->label); + self->priv->label = NULL; + } + + if (G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose) + { + G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose (object); + } +} + static void darken_or_lighten (cairo_t *ctx, GdkRGBA const *color) @@ -121,20 +151,24 @@ darken_or_lighten (cairo_t *ctx, } static void -render_label (GitgDiffLineRenderer *lr, - cairo_t *ctx, - GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GdkRectangle *expose_area, - GtkCellRendererState flags) +render_label (GtkSourceGutterRenderer *renderer, + cairo_t *ctx, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkTextIter *start, + GtkTextIter *end, + GtkSourceGutterRendererState renderer_state) { + GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer); + GtkWidget *widget; PangoLayout *layout; GtkStyleContext *style_context; GtkStateType state; gint pixel_height; GdkRGBA fg_color, bg_color; + widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer)); + layout = gtk_widget_create_pango_layout (widget, ""); pango_layout_set_markup (layout, lr->priv->label, -1); @@ -182,14 +216,15 @@ render_label (GitgDiffLineRenderer *lr, } static void -render_lines (GitgDiffLineRenderer *lr, - cairo_t *ctx, - GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GdkRectangle *expose_area, - GtkCellRendererState flags) +render_lines (GtkSourceGutterRenderer *renderer, + cairo_t *ctx, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkTextIter *start, + GtkTextIter *end, + GtkSourceGutterRendererState renderer_state) { + GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer); /* Render new/old in the cell area */ gchar old_str[16]; gchar new_str[16]; @@ -198,6 +233,8 @@ render_lines (GitgDiffLineRenderer *lr, GtkWidget *widget; GtkStyleContext *style_context; + widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer)); + PangoLayout *layout = gtk_widget_create_pango_layout (widget, ""); pango_layout_set_width (layout, cell_area->width / 2); @@ -250,50 +287,60 @@ render_lines (GitgDiffLineRenderer *lr, } static void -gitg_diff_line_renderer_render_impl (GtkCellRenderer *cell, - cairo_t *ctx, - GtkWidget *widget, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GdkRectangle *expose_area, - GtkCellRendererState flags) +gitg_diff_line_renderer_draw_impl (GtkSourceGutterRenderer *renderer, + cairo_t *ctx, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkTextIter *start, + GtkTextIter *end, + GtkSourceGutterRendererState renderer_state) { - GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (cell); + GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer); + + /* Chain up to draw background */ + GTK_SOURCE_GUTTER_RENDERER_CLASS ( + gitg_diff_line_renderer_parent_class)->draw (renderer, + ctx, + background_area, + cell_area, + start, + end, + renderer_state); if (lr->priv->label) { - render_label (lr, + render_label (renderer, ctx, - widget, background_area, cell_area, - expose_area, - flags); + start, + end, + renderer_state); } else { - render_lines (lr, + render_lines (renderer, ctx, - widget, background_area, cell_area, - expose_area, - flags); + start, + end, + renderer_state); } } - +/* static void -gitg_diff_line_renderer_get_size_impl (GtkCellRenderer *cell, - GtkWidget *widget, - GdkRectangle *cell_area, - gint *x_offset, - gint *y_offset, - gint *width, - gint *height) +gitg_diff_line_renderer_get_size_impl (GtkSourceGutterRenderer *renderer, + GtkWidget *widget, + GdkRectangle *cell_area, + gint *x_offset, + gint *y_offset, + gint *width, + gint *height) { - GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (cell); + GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer); - /* Get size of this rendering */ + / Get size of this rendering / PangoLayout *layout; gchar str[16]; gint pixel_width; @@ -305,7 +352,7 @@ gitg_diff_line_renderer_get_size_impl (GtkCellRenderer *cell, layout = gtk_widget_create_pango_layout (widget, str); pango_layout_get_pixel_size(layout, &pixel_width, &pixel_height); - g_object_get (cell, "xpad", &xpad, "ypad", &ypad, NULL); + g_object_get (lr, "xpad", &xpad, "ypad", &ypad, NULL); pixel_width += pixel_width + xpad * 2 + 3; if (lr->priv->label) @@ -360,19 +407,20 @@ gitg_diff_line_renderer_get_size_impl (GtkCellRenderer *cell, } g_object_unref (G_OBJECT (layout)); -} +}*/ static void gitg_diff_line_renderer_class_init (GitgDiffLineRendererClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkCellRendererClass *cell_renderer_class = GTK_CELL_RENDERER_CLASS (klass); + GtkSourceGutterRendererClass *gutter_renderer_class = GTK_SOURCE_GUTTER_RENDERER_CLASS (klass); - cell_renderer_class->render = gitg_diff_line_renderer_render_impl; - cell_renderer_class->get_size = gitg_diff_line_renderer_get_size_impl; + gutter_renderer_class->draw = gitg_diff_line_renderer_draw_impl; object_class->set_property = gitg_diff_line_renderer_set_property; object_class->get_property = gitg_diff_line_renderer_get_property; + object_class->constructed = gitg_diff_line_renderer_constructed; + object_class->dispose = gitg_diff_line_renderer_dispose; g_object_class_install_property (object_class, PROP_LINE_OLD, diff --git a/gitg/gitg-diff-line-renderer.h b/gitg/gitg-diff-line-renderer.h index 582d42fa..deffacb2 100644 --- a/gitg/gitg-diff-line-renderer.h +++ b/gitg/gitg-diff-line-renderer.h @@ -23,7 +23,7 @@ #ifndef __GITG_DIFF_LINE_RENDERER_H__ #define __GITG_DIFF_LINE_RENDERER_H__ -#include +#include G_BEGIN_DECLS @@ -40,13 +40,13 @@ typedef struct _GitgDiffLineRendererClass GitgDiffLineRendererClass; typedef struct _GitgDiffLineRendererPrivate GitgDiffLineRendererPrivate; struct _GitgDiffLineRenderer { - GtkCellRenderer parent; + GtkSourceGutterRenderer parent; GitgDiffLineRendererPrivate *priv; }; struct _GitgDiffLineRendererClass { - GtkCellRendererClass parent_class; + GtkSourceGutterRendererClass parent_class; }; GType gitg_diff_line_renderer_get_type (void) G_GNUC_CONST; diff --git a/gitg/gitg-diff-view.c b/gitg/gitg-diff-view.c index 63d36959..faf7dcee 100644 --- a/gitg/gitg-diff-view.c +++ b/gitg/gitg-diff-view.c @@ -56,17 +56,16 @@ static void on_buffer_delete_range (GtkTextBuffer *buffer, GtkTextIter *end, GitgDiffView *view); -static void +/*static void line_renderer_size_func (GtkSourceGutter *gutter, GtkCellRenderer *cell, GitgDiffView *view); -static void -line_renderer_data_func (GtkSourceGutter *gutter, - GtkCellRenderer *cell, - gint line_number, - gboolean current_line, - GitgDiffView *view); - +*/ +static void line_renderer_query_data_cb (GtkSourceGutterRenderer *renderer, + GtkTextIter *start, + GtkTextIter *end, + GtkSourceGutterRendererState state, + GitgDiffView *view); static void disable_diff_view (GitgDiffView *view); static void enable_diff_view (GitgDiffView *view); @@ -392,7 +391,7 @@ disable_diff_view (GitgDiffView *view) GTK_TEXT_WINDOW_LEFT); gtk_source_gutter_remove (gutter, - GTK_CELL_RENDERER (view->priv->line_renderer)); + GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer)); } view->priv->diff_enabled = FALSE; @@ -446,20 +445,25 @@ enable_diff_view (GitgDiffView *view) GTK_TEXT_WINDOW_LEFT); gtk_source_gutter_insert (gutter, - GTK_CELL_RENDERER (view->priv->line_renderer), + GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer), 0); - gtk_source_gutter_set_cell_data_func (gutter, - GTK_CELL_RENDERER (view->priv->line_renderer), + /*gtk_source_gutter_set_cell_data_func (gutter, + GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer), (GtkSourceGutterDataFunc)line_renderer_data_func, view, NULL); gtk_source_gutter_set_cell_size_func (gutter, - GTK_CELL_RENDERER (view->priv->line_renderer), + GTK_SOURCE_GUTTER_RENDERER (view->priv->line_renderer), (GtkSourceGutterSizeFunc)line_renderer_size_func, view, - NULL); + NULL);*/ + + g_signal_connect (view->priv->line_renderer, + "query-data", + (GCallback) line_renderer_query_data_cb, + view); view->priv->diff_enabled = TRUE; } @@ -768,7 +772,7 @@ get_initial_counters (GitgDiffView *view, Region *region, guint line, guint coun ++counters[1]; } } - +/* static void line_renderer_size_func (GtkSourceGutter *gutter, GtkCellRenderer *cell, @@ -788,19 +792,26 @@ line_renderer_size_func (GtkSourceGutter *gutter, g_object_set (cell, "label", label, NULL); g_free (label); } -} +}*/ static void -line_renderer_data_func (GtkSourceGutter *gutter, - GtkCellRenderer *cell, - gint line_number, - gboolean current_line, - GitgDiffView *view) +line_renderer_query_data_cb (GtkSourceGutterRenderer *renderer, + GtkTextIter *start, + GtkTextIter *end, + GtkSourceGutterRendererState state, + GitgDiffView *view) { gint line_old = -1; gint line_new = -1; + gint line_number; + gboolean current_line; Region **current = &view->priv->lines_current_region; + line_number = gtk_text_iter_get_line (start) + 1; + + current_line = (state & GTK_SOURCE_GUTTER_RENDERER_STATE_CURSOR) && + gtk_text_view_get_cursor_visible (gtk_source_gutter_renderer_get_view (renderer)); + ensure_scan (view, line_number); if (!*current || view->priv->lines_previous_line + 1 != line_number) @@ -835,7 +846,7 @@ line_renderer_data_func (GtkSourceGutter *gutter, } } - g_object_set (cell, "line_old", line_old, "line_new", line_new, NULL); + g_object_set (renderer, "line_old", line_old, "line_new", line_new, NULL); if (*current && (*current)->next && line_number == (*current)->next->line - 1) { @@ -849,7 +860,7 @@ line_renderer_data_func (GtkSourceGutter *gutter, line_number, view->priv->label_func_user_data); - g_object_set (cell, "label", label, NULL); + g_object_set (renderer, "label", label, NULL); g_free (label); } } From be5a7bd828747d3e179da5d51cf516c6bd672ac5 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Tue, 8 Feb 2011 18:55:08 +0100 Subject: [PATCH 21/65] Do not leak the MarkAttributes. --- gitg/gitg-commit-view.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index ccdc18cd..d095e997 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -1440,6 +1440,7 @@ gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder) attrs, 1); g_object_unref (pixbuf); + g_object_unref (attrs); } pixbuf = gtk_icon_theme_load_icon(theme, GTK_STOCK_REMOVE, 12, GTK_ICON_LOOKUP_USE_BUILTIN, NULL); @@ -1454,6 +1455,7 @@ gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder) attrs, 2); g_object_unref (pixbuf); + g_object_unref (attrs); } gitg_utils_set_monospace_font(GTK_WIDGET(self->priv->changes_view)); From 895d65ff2b3a934854586dd1435da7c3bcf6b4ee Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Tue, 8 Feb 2011 21:34:24 +0100 Subject: [PATCH 22/65] Use g_(s)list_free_full. --- gitg/gitg-commit-view.c | 9 +++---- gitg/gitg-repository-dialog.c | 8 +++---- gitg/gitg-revision-changes-panel.c | 7 +----- gitg/gitg-revision-files-panel.c | 3 +-- gitg/gitg-window.c | 38 ++++++++++-------------------- gitg/gitg.c | 3 +-- libgitg/gitg-lanes.c | 6 ++--- libgitg/gitg-repository.c | 3 +-- libgitg/gitg-revision.c | 3 +-- 9 files changed, 25 insertions(+), 55 deletions(-) diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index d095e997..da7a79db 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -369,8 +369,7 @@ get_selected_files(GtkTreeView *tree_view, } else { - g_list_foreach(items, (GFunc)gtk_tree_path_free, NULL); - g_list_free(items); + g_list_free_full (items, gtk_tree_path_free); } if (files) @@ -421,8 +420,7 @@ check_selection(GtkTreeView *tree_view, ret = TRUE; } - g_list_foreach(paths, (GFunc)gtk_tree_path_free, NULL); - g_list_free(paths); + g_list_free_full (paths, gtk_tree_path_free); return ret; } @@ -1251,8 +1249,7 @@ on_tree_view_drag_data_get (GtkWidget *widget, g_strfreev(uris); - g_list_foreach(selected, (GFunc)g_object_unref, NULL); - g_list_free(selected); + g_list_free_full (selected, g_object_unref); } static void diff --git a/gitg/gitg-repository-dialog.c b/gitg/gitg-repository-dialog.c index 11921195..172a01d3 100644 --- a/gitg/gitg-repository-dialog.c +++ b/gitg/gitg-repository-dialog.c @@ -157,7 +157,7 @@ gitg_repository_dialog_finalize (GObject *object) } g_list_free (copy); - g_list_foreach (dialog->priv->fetchers, (GFunc)fetch_cleanup, NULL); + g_list_free (dialog->priv->fetchers); G_OBJECT_CLASS (gitg_repository_dialog_parent_class)->finalize (object); } @@ -230,8 +230,7 @@ update_fetch (GitgRepositoryDialog *dialog) dialog->priv->show_fetch = show_fetch; - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); } static void @@ -248,8 +247,7 @@ update_sensitivity (GitgRepositoryDialog *dialog) update_fetch (dialog); - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); } static void diff --git a/gitg/gitg-revision-changes-panel.c b/gitg/gitg-revision-changes-panel.c index 06cada85..8706e577 100644 --- a/gitg/gitg-revision-changes-panel.c +++ b/gitg/gitg-revision-changes-panel.c @@ -485,16 +485,11 @@ free_cached_header (gpointer header) static void free_cached_headers (GitgRevisionChangesPanel *changes_panel) { - g_slist_foreach (changes_panel->priv->cached_headers, - (GFunc)free_cached_header, - NULL); - - g_slist_free (changes_panel->priv->cached_headers); + g_slist_free_full (changes_panel->priv->cached_headers, free_cached_header); changes_panel->priv->cached_headers = NULL; } - static void gitg_revision_changes_panel_finalize (GObject *object) { diff --git a/gitg/gitg-revision-files-panel.c b/gitg/gitg-revision-files-panel.c index b2947b81..91885d79 100644 --- a/gitg/gitg-revision-files-panel.c +++ b/gitg/gitg-revision-files-panel.c @@ -287,8 +287,7 @@ on_selection_changed (GtkTreeSelection *selection, path = gtk_tree_path_copy ((GtkTreePath *)rows->data); } - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); if (!path) { diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 67bda634..7825e299 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -1091,11 +1091,8 @@ gitg_window_destroy (GtkWidget *widget) { gtk_tree_view_set_model (window->priv->tree_view, NULL); - g_slist_foreach (window->priv->revision_panels, (GFunc)g_object_unref, NULL); - g_slist_free (window->priv->revision_panels); - - g_slist_foreach (window->priv->activatables, (GFunc)g_object_unref, NULL); - g_slist_free (window->priv->activatables); + g_slist_free_full (window->priv->revision_panels, g_object_unref); + g_slist_free_full (window->priv->activatables, g_object_unref); window->priv->revision_panels = NULL; window->priv->activatables = NULL; @@ -1645,8 +1642,7 @@ fill_branches_combo (GitgWindow *window) gtk_combo_box_set_active_iter (window->priv->combo_branches, &active); } - g_slist_foreach (refs, (GFunc)gitg_ref_free, NULL); - g_slist_free (refs); + g_slist_free_full (refs, gitg_ref_free); if (active_from_selection) { @@ -2703,8 +2699,7 @@ update_merge_rebase (GitgWindow *window, } } - g_slist_foreach (refs, (GFunc)gitg_ref_free, NULL); - g_slist_free (refs); + g_slist_free_full (refs, gitg_ref_free); if (gitg_ref_get_ref_type (ref) == GITG_REF_TYPE_BRANCH) { @@ -2786,8 +2781,7 @@ has_local_ref (GitgWindow *window, } } - g_slist_foreach (refs, (GFunc)gitg_ref_free, NULL); - g_slist_free (refs); + g_slist_free_full (refs, gitg_ref_free); return ret; } @@ -2946,8 +2940,7 @@ on_cherry_pick_activated (GtkAction *action, gitg_revision_unref (rev); - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); } static void @@ -3032,8 +3025,7 @@ update_cherry_pick (GitgWindow *window) } } - g_slist_foreach (refs, (GFunc)gitg_ref_free, NULL); - g_slist_free (refs); + g_slist_free_full (refs, gitg_ref_free); } static gboolean @@ -3099,8 +3091,7 @@ popup_revision (GitgWindow *window, gtk_action_set_visible (tag, FALSE); } - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); if (!show) { @@ -3376,9 +3367,7 @@ on_format_patch_response (GtkDialog *dialog, } } - g_list_foreach (info->revisions, (GFunc)gitg_revision_unref, NULL); - g_list_free (info->revisions); - + g_list_free_full (info->revisions, gitg_revision_unref); g_slice_free (FormatPatchInfo, info); gtk_widget_destroy (GTK_WIDGET (dialog)); @@ -3463,8 +3452,7 @@ on_revision_format_patch_activate (GtkAction *action, gtk_widget_show (dialog); - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); } void @@ -3507,8 +3495,7 @@ on_revision_new_branch_activate (GtkAction *action, gitg_revision_unref (rev); } - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); } void @@ -3559,8 +3546,7 @@ on_revision_tag_activate (GtkAction *action, gitg_revision_unref (rev); } - g_list_foreach (rows, (GFunc)gtk_tree_path_free, NULL); - g_list_free (rows); + g_list_free_full (rows, gtk_tree_path_free); } void diff --git a/gitg/gitg.c b/gitg/gitg.c index 2372a104..54ef19e2 100644 --- a/gitg/gitg.c +++ b/gitg/gitg.c @@ -162,8 +162,7 @@ set_icons () gtk_window_set_default_icon_list (icons); - g_list_foreach (icons, (GFunc)g_object_unref, NULL); - g_list_free (icons); + g_list_free_full (icons, g_object_unref); } int diff --git a/libgitg/gitg-lanes.c b/libgitg/gitg-lanes.c index 2a1903ae..c0596382 100644 --- a/libgitg/gitg-lanes.c +++ b/libgitg/gitg-lanes.c @@ -101,8 +101,7 @@ collapsed_lane_new (LaneContainer *container) static void free_lanes (GitgLanes *lanes) { - g_slist_foreach (lanes->priv->lanes, (GFunc)lane_container_free, NULL); - g_slist_free (lanes->priv->lanes); + g_slist_free_full (lanes->priv->lanes, lane_container_free); lanes->priv->lanes = NULL; } @@ -316,8 +315,7 @@ gitg_lanes_reset (GitgLanes *lanes) free_lanes (lanes); gitg_color_reset (); - g_slist_foreach (lanes->priv->previous, (GFunc)gitg_revision_unref, NULL); - g_slist_free (lanes->priv->previous); + g_slist_free_full (lanes->priv->previous, gitg_revision_unref); lanes->priv->previous = NULL; diff --git a/libgitg/gitg-repository.c b/libgitg/gitg-repository.c index 4f7db711..15fb14c4 100644 --- a/libgitg/gitg-repository.c +++ b/libgitg/gitg-repository.c @@ -1140,8 +1140,7 @@ on_loader_update (GitgShell *object, static void free_refs (GSList *refs) { - g_slist_foreach (refs, (GFunc)gitg_ref_free, NULL); - g_slist_free (refs); + g_slist_free_full (refs, gitg_ref_free); } static gboolean diff --git a/libgitg/gitg-revision.c b/libgitg/gitg-revision.c index 40835153..4220ec36 100644 --- a/libgitg/gitg-revision.c +++ b/libgitg/gitg-revision.c @@ -53,8 +53,7 @@ G_DEFINE_BOXED_TYPE (GitgRevision, gitg_revision, gitg_revision_ref, gitg_revisi static void free_lanes (GitgRevision *rv) { - g_slist_foreach (rv->lanes, (GFunc)gitg_lane_free, NULL); - g_slist_free (rv->lanes); + g_slist_free_full (rv->lanes, gitg_lane_free); rv->lanes = NULL; } From 11b93fbb30eed017dabcb12a7b6caa9b4a7e219c Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Wed, 9 Feb 2011 11:30:47 +0100 Subject: [PATCH 23/65] Cast to GDestroyNotify. --- gitg/gitg-commit-view.c | 4 ++-- gitg/gitg-repository-dialog.c | 4 ++-- gitg/gitg-revision-files-panel.c | 2 +- gitg/gitg-window.c | 20 ++++++++++---------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index da7a79db..5425307b 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -369,7 +369,7 @@ get_selected_files(GtkTreeView *tree_view, } else { - g_list_free_full (items, gtk_tree_path_free); + g_list_free_full (items, (GDestroyNotify)gtk_tree_path_free); } if (files) @@ -420,7 +420,7 @@ check_selection(GtkTreeView *tree_view, ret = TRUE; } - g_list_free_full (paths, gtk_tree_path_free); + g_list_free_full (paths, (GDestroyNotify)gtk_tree_path_free); return ret; } diff --git a/gitg/gitg-repository-dialog.c b/gitg/gitg-repository-dialog.c index 172a01d3..263d8fcf 100644 --- a/gitg/gitg-repository-dialog.c +++ b/gitg/gitg-repository-dialog.c @@ -230,7 +230,7 @@ update_fetch (GitgRepositoryDialog *dialog) dialog->priv->show_fetch = show_fetch; - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); } static void @@ -247,7 +247,7 @@ update_sensitivity (GitgRepositoryDialog *dialog) update_fetch (dialog); - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); } static void diff --git a/gitg/gitg-revision-files-panel.c b/gitg/gitg-revision-files-panel.c index 91885d79..3caa690e 100644 --- a/gitg/gitg-revision-files-panel.c +++ b/gitg/gitg-revision-files-panel.c @@ -287,7 +287,7 @@ on_selection_changed (GtkTreeSelection *selection, path = gtk_tree_path_copy ((GtkTreePath *)rows->data); } - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); if (!path) { diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 7825e299..6e11ab08 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -1642,7 +1642,7 @@ fill_branches_combo (GitgWindow *window) gtk_combo_box_set_active_iter (window->priv->combo_branches, &active); } - g_slist_free_full (refs, gitg_ref_free); + g_slist_free_full (refs, (GDestroyNotify)gitg_ref_free); if (active_from_selection) { @@ -2699,7 +2699,7 @@ update_merge_rebase (GitgWindow *window, } } - g_slist_free_full (refs, gitg_ref_free); + g_slist_free_full (refs, (GDestroyNotify)gitg_ref_free); if (gitg_ref_get_ref_type (ref) == GITG_REF_TYPE_BRANCH) { @@ -2781,7 +2781,7 @@ has_local_ref (GitgWindow *window, } } - g_slist_free_full (refs, gitg_ref_free); + g_slist_free_full (refs, (GDestroyNotify)gitg_ref_free); return ret; } @@ -2940,7 +2940,7 @@ on_cherry_pick_activated (GtkAction *action, gitg_revision_unref (rev); - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); } static void @@ -3025,7 +3025,7 @@ update_cherry_pick (GitgWindow *window) } } - g_slist_free_full (refs, gitg_ref_free); + g_slist_free_full (refs, (GDestroyNotify)gitg_ref_free); } static gboolean @@ -3091,7 +3091,7 @@ popup_revision (GitgWindow *window, gtk_action_set_visible (tag, FALSE); } - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); if (!show) { @@ -3367,7 +3367,7 @@ on_format_patch_response (GtkDialog *dialog, } } - g_list_free_full (info->revisions, gitg_revision_unref); + g_list_free_full (info->revisions, (GDestroyNotify)gitg_revision_unref); g_slice_free (FormatPatchInfo, info); gtk_widget_destroy (GTK_WIDGET (dialog)); @@ -3452,7 +3452,7 @@ on_revision_format_patch_activate (GtkAction *action, gtk_widget_show (dialog); - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); } void @@ -3495,7 +3495,7 @@ on_revision_new_branch_activate (GtkAction *action, gitg_revision_unref (rev); } - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); } void @@ -3546,7 +3546,7 @@ on_revision_tag_activate (GtkAction *action, gitg_revision_unref (rev); } - g_list_free_full (rows, gtk_tree_path_free); + g_list_free_full (rows, (GDestroyNotify)gtk_tree_path_free); } void From 9238a7fd8d9e7ea6b6c13e33d5f278659d8df63f Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Tue, 22 Feb 2011 17:36:28 +0100 Subject: [PATCH 24/65] Fix warnings spotted by gcc 4.6. --- gitg/gitg-commit-view.c | 9 --------- gitg/gitg-diff-view.c | 4 ---- libgitg/gitg-lanes.c | 4 ++-- libgitg/gitg-repository.c | 2 +- libgitg/gitg-revision.c | 2 +- 5 files changed, 4 insertions(+), 17 deletions(-) diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c index 5425307b..53c75eb2 100644 --- a/gitg/gitg-commit-view.c +++ b/gitg/gitg-commit-view.c @@ -556,15 +556,6 @@ staged_selection_changed (GtkTreeSelection *selection, GitgCommitView *view) } else { - gchar *basename; - GtkSourceLanguage *language; - - basename = g_file_get_basename(f); - language = gitg_utils_get_language(basename, - content_type); - - g_free(basename); - gtk_widget_set_sensitive (GTK_WIDGET (view->priv->hscale_context), FALSE); diff --git a/gitg/gitg-diff-view.c b/gitg/gitg-diff-view.c index faf7dcee..b397a650 100644 --- a/gitg/gitg-diff-view.c +++ b/gitg/gitg-diff-view.c @@ -804,14 +804,10 @@ line_renderer_query_data_cb (GtkSourceGutterRenderer *renderer, gint line_old = -1; gint line_new = -1; gint line_number; - gboolean current_line; Region **current = &view->priv->lines_current_region; line_number = gtk_text_iter_get_line (start) + 1; - current_line = (state & GTK_SOURCE_GUTTER_RENDERER_STATE_CURSOR) && - gtk_text_view_get_cursor_visible (gtk_source_gutter_renderer_get_view (renderer)); - ensure_scan (view, line_number); if (!*current || view->priv->lines_previous_line + 1 != line_number) diff --git a/libgitg/gitg-lanes.c b/libgitg/gitg-lanes.c index c0596382..41b86508 100644 --- a/libgitg/gitg-lanes.c +++ b/libgitg/gitg-lanes.c @@ -101,7 +101,7 @@ collapsed_lane_new (LaneContainer *container) static void free_lanes (GitgLanes *lanes) { - g_slist_free_full (lanes->priv->lanes, lane_container_free); + g_slist_free_full (lanes->priv->lanes, (GDestroyNotify)lane_container_free); lanes->priv->lanes = NULL; } @@ -315,7 +315,7 @@ gitg_lanes_reset (GitgLanes *lanes) free_lanes (lanes); gitg_color_reset (); - g_slist_free_full (lanes->priv->previous, gitg_revision_unref); + g_slist_free_full (lanes->priv->previous, (GDestroyNotify)gitg_revision_unref); lanes->priv->previous = NULL; diff --git a/libgitg/gitg-repository.c b/libgitg/gitg-repository.c index 15fb14c4..17f7d308 100644 --- a/libgitg/gitg-repository.c +++ b/libgitg/gitg-repository.c @@ -1140,7 +1140,7 @@ on_loader_update (GitgShell *object, static void free_refs (GSList *refs) { - g_slist_free_full (refs, gitg_ref_free); + g_slist_free_full (refs, (GDestroyNotify)gitg_ref_free); } static gboolean diff --git a/libgitg/gitg-revision.c b/libgitg/gitg-revision.c index 4220ec36..94b05ec1 100644 --- a/libgitg/gitg-revision.c +++ b/libgitg/gitg-revision.c @@ -53,7 +53,7 @@ G_DEFINE_BOXED_TYPE (GitgRevision, gitg_revision, gitg_revision_ref, gitg_revisi static void free_lanes (GitgRevision *rv) { - g_slist_free_full (rv->lanes, gitg_lane_free); + g_slist_free_full (rv->lanes, (GDestroyNotify)gitg_lane_free); rv->lanes = NULL; } From 9ba57897ee391e2c094c438e56a20bfef63ff6f1 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Tue, 22 Feb 2011 17:41:45 +0100 Subject: [PATCH 25/65] Chain up on constructed inconditionally. --- gitg/gitg-diff-line-renderer.c | 12 ++---------- gitg/gitg-diff-view.c | 5 +---- libgitg/gitg-line-parser.c | 5 +---- libgitg/gitg-repository.c | 5 +---- 4 files changed, 5 insertions(+), 22 deletions(-) diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c index 8a1805a7..f1ba96e3 100644 --- a/gitg/gitg-diff-line-renderer.c +++ b/gitg/gitg-diff-line-renderer.c @@ -99,12 +99,7 @@ gitg_diff_line_renderer_constructed (GObject *object) { /*GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object);*/ - - - if (G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed) - { - G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed (object); - } + G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed (object); } static void @@ -118,10 +113,7 @@ gitg_diff_line_renderer_dispose (GObject *object) self->priv->label = NULL; } - if (G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose) - { - G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose (object); - } + G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose (object); } static void diff --git a/gitg/gitg-diff-view.c b/gitg/gitg-diff-view.c index b397a650..49e71d9b 100644 --- a/gitg/gitg-diff-view.c +++ b/gitg/gitg-diff-view.c @@ -294,10 +294,7 @@ gitg_diff_view_constructed (GObject *object) { g_object_set (object, "show-line-numbers", FALSE, NULL); - if (G_OBJECT_CLASS (gitg_diff_view_parent_class)->constructed) - { - G_OBJECT_CLASS (gitg_diff_view_parent_class)->constructed (object); - } + G_OBJECT_CLASS (gitg_diff_view_parent_class)->constructed (object); } static void diff --git a/libgitg/gitg-line-parser.c b/libgitg/gitg-line-parser.c index 82f2624d..5526ce11 100644 --- a/libgitg/gitg-line-parser.c +++ b/libgitg/gitg-line-parser.c @@ -324,10 +324,7 @@ gitg_line_parser_constructed (GObject *object) stream->priv->read_buffer = g_slice_alloc (sizeof (gchar) * (stream->priv->buffer_size + 1)); - if (G_OBJECT_CLASS (gitg_line_parser_parent_class)->constructed) - { - G_OBJECT_CLASS (gitg_line_parser_parent_class)->constructed (object); - } + G_OBJECT_CLASS (gitg_line_parser_parent_class)->constructed (object); } static void start_read_lines (AsyncData *data); diff --git a/libgitg/gitg-repository.c b/libgitg/gitg-repository.c index 17f7d308..7a950d7a 100644 --- a/libgitg/gitg-repository.c +++ b/libgitg/gitg-repository.c @@ -719,10 +719,7 @@ gitg_repository_constructed (GObject *object) install_head_monitor (repository); - if (G_OBJECT_CLASS (gitg_repository_parent_class)->constructed) - { - G_OBJECT_CLASS (gitg_repository_parent_class)->constructed (object); - } + G_OBJECT_CLASS (gitg_repository_parent_class)->constructed (object); } static void From f5f38a07cff18f48cd2c7045947716c6405cdd19 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 24 Feb 2011 12:18:47 +0100 Subject: [PATCH 26/65] Make the line renderer usable. It probably needs some more polishing but it is currently working and better something than anything :) --- gitg/gitg-diff-line-renderer.c | 289 ++++++++++++++++++++++----------- 1 file changed, 195 insertions(+), 94 deletions(-) diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c index f1ba96e3..ee83de20 100644 --- a/gitg/gitg-diff-line-renderer.c +++ b/gitg/gitg-diff-line-renderer.c @@ -39,6 +39,13 @@ struct _GitgDiffLineRendererPrivate gint line_old; gint line_new; gchar *label; + gint num_digits; + + PangoLayout *cached_layout; + PangoAttribute *fg_attr; + PangoAttrList *cached_attr_list; + + glong changed_handler_id; }; G_DEFINE_TYPE (GitgDiffLineRenderer, gitg_diff_line_renderer, GTK_TYPE_SOURCE_GUTTER_RENDERER) @@ -95,25 +102,56 @@ gitg_diff_line_renderer_get_property (GObject *object, } static void -gitg_diff_line_renderer_constructed (GObject *object) -{ - /*GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object);*/ - - G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->constructed (object); -} - -static void -gitg_diff_line_renderer_dispose (GObject *object) +gitg_diff_line_renderer_finalize (GObject *object) { GitgDiffLineRenderer *self = GITG_DIFF_LINE_RENDERER (object); - if (self->priv->label != NULL) - { - g_free (self->priv->label); - self->priv->label = NULL; - } + g_free (self->priv->label); - G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->dispose (object); + G_OBJECT_CLASS (gitg_diff_line_renderer_parent_class)->finalize (object); +} + +static void +create_layout (GitgDiffLineRenderer *renderer, + GtkWidget *widget) +{ + PangoLayout *layout; + PangoAttribute *attr; + GtkStyleContext *context; + GdkRGBA color; + PangoAttrList *attr_list; + + layout = gtk_widget_create_pango_layout (widget, NULL); + + context = gtk_widget_get_style_context (widget); + gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &color); + + attr = pango_attr_foreground_new (color.red * 65535, + color.green * 65535, + color.blue * 65535); + + attr->start_index = 0; + attr->end_index = G_MAXINT; + + attr_list = pango_attr_list_new (); + pango_attr_list_insert (attr_list, attr); + + renderer->priv->fg_attr = attr; + renderer->priv->cached_layout = layout; + renderer->priv->cached_attr_list = attr_list; +} + +static void +gitg_diff_line_renderer_begin (GtkSourceGutterRenderer *renderer, + cairo_t *cr, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkTextIter *start, + GtkTextIter *end) +{ + GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer); + + create_layout (lr, GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer))); } static void @@ -160,8 +198,7 @@ render_label (GtkSourceGutterRenderer *renderer, GdkRGBA fg_color, bg_color; widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer)); - - layout = gtk_widget_create_pango_layout (widget, ""); + layout = lr->priv->cached_layout; pango_layout_set_markup (layout, lr->priv->label, -1); pango_layout_set_width (layout, cell_area->width); @@ -220,14 +257,13 @@ render_lines (GtkSourceGutterRenderer *renderer, /* Render new/old in the cell area */ gchar old_str[16]; gchar new_str[16]; - guint xpad; - guint ypad; + PangoLayout *layout; GtkWidget *widget; GtkStyleContext *style_context; widget = GTK_WIDGET (gtk_source_gutter_renderer_get_view (renderer)); + layout = lr->priv->cached_layout; - PangoLayout *layout = gtk_widget_create_pango_layout (widget, ""); pango_layout_set_width (layout, cell_area->width / 2); pango_layout_set_alignment (layout, PANGO_ALIGN_RIGHT); @@ -250,42 +286,38 @@ render_lines (GtkSourceGutterRenderer *renderer, *new_str = '\0'; } - g_object_get (lr, "xpad", &xpad, "ypad", &ypad, NULL); - pango_layout_set_text (layout, old_str, -1); style_context = gtk_widget_get_style_context (widget); gtk_render_layout (style_context, ctx, - cell_area->x + cell_area->width / 2 - 1 - xpad, + cell_area->x + cell_area->width / 2 - 1, cell_area->y, layout); pango_layout_set_text (layout, new_str, -1); gtk_render_layout (style_context, ctx, - cell_area->x + cell_area->width - xpad, + cell_area->x + cell_area->width, cell_area->y, layout); - g_object_unref (layout); - gtk_render_line (style_context, ctx, background_area->x + background_area->width / 2, - background_area->y, - background_area->y + background_area->height, - background_area->x + background_area->width / 2); + background_area->y - 1, + background_area->x + background_area->width / 2, + background_area->y + background_area->height); } static void -gitg_diff_line_renderer_draw_impl (GtkSourceGutterRenderer *renderer, - cairo_t *ctx, - GdkRectangle *background_area, - GdkRectangle *cell_area, - GtkTextIter *start, - GtkTextIter *end, - GtkSourceGutterRendererState renderer_state) +gitg_diff_line_renderer_draw (GtkSourceGutterRenderer *renderer, + cairo_t *ctx, + GdkRectangle *background_area, + GdkRectangle *cell_area, + GtkTextIter *start, + GtkTextIter *end, + GtkSourceGutterRendererState renderer_state) { GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer); @@ -320,99 +352,168 @@ gitg_diff_line_renderer_draw_impl (GtkSourceGutterRenderer *renderer, renderer_state); } } -/* + static void -gitg_diff_line_renderer_get_size_impl (GtkSourceGutterRenderer *renderer, - GtkWidget *widget, - GdkRectangle *cell_area, - gint *x_offset, - gint *y_offset, - gint *width, - gint *height) +gitg_diff_line_renderer_end (GtkSourceGutterRenderer *renderer) { GitgDiffLineRenderer *lr = GITG_DIFF_LINE_RENDERER (renderer); - / Get size of this rendering / + g_object_unref (lr->priv->cached_layout); + lr->priv->cached_layout = NULL; + + pango_attr_list_unref (lr->priv->cached_attr_list); + lr->priv->cached_attr_list = NULL; + + lr->priv->fg_attr = NULL; +} + +static void +measure_text (GitgDiffLineRenderer *lr, + const gchar *markup, + const gchar *text, + gint *width, + gint *height) +{ PangoLayout *layout; - gchar str[16]; - gint pixel_width; - gint pixel_height; - guint xpad; - guint ypad; + gint w; + gint h; + GtkSourceGutterRenderer *r; + GtkTextView *view; - g_snprintf(str, sizeof(str), "%d", MAX(MAX(99, lr->priv->line_old), lr->priv->line_new)); - layout = gtk_widget_create_pango_layout (widget, str); - pango_layout_get_pixel_size(layout, &pixel_width, &pixel_height); + r = GTK_SOURCE_GUTTER_RENDERER (lr); + view = gtk_source_gutter_renderer_get_view (r); - g_object_get (lr, "xpad", &xpad, "ypad", &ypad, NULL); - pixel_width += pixel_width + xpad * 2 + 3; + layout = gtk_widget_create_pango_layout (GTK_WIDGET (view), NULL); - if (lr->priv->label) + if (markup) { - PangoLayout *lbl_layout; - gint lbl_pixel_width; - gint lbl_pixel_height; - - lbl_layout = gtk_widget_create_pango_layout (widget, - ""); - - pango_layout_set_markup (lbl_layout, lr->priv->label, -1); - - pango_layout_get_pixel_size (lbl_layout, - &lbl_pixel_width, - &lbl_pixel_height); - - lbl_pixel_width += 4; - - if (lbl_pixel_width > pixel_width) - { - pixel_width = lbl_pixel_width; - } - - if (lbl_pixel_height > pixel_height) - { - pixel_height = lbl_pixel_height; - } + pango_layout_set_markup (layout, + markup, + -1); + } + else + { + pango_layout_set_text (layout, + text, + -1); } - pixel_width += xpad * 2; - pixel_height += ypad * 2; + pango_layout_get_size (layout, &w, &h); if (width) { - *width = pixel_width; + *width = w / PANGO_SCALE; } if (height) { - *height = pixel_height; + *height = h / PANGO_SCALE; } - if (x_offset) + g_object_unref (layout); +} + +static void +recalculate_size (GitgDiffLineRenderer *lr) +{ + /* Get size of this rendering */ + gint num_digits, num; + + num_digits = 0; + num = lr->priv->line_old; + + while (num > 0) { - *x_offset = 0; + num /= 10; + ++num_digits; } - if (y_offset) + num = lr->priv->line_new; + + while (num > 0) { - *y_offset = 0; + num /= 10; + ++num_digits; } - g_object_unref (G_OBJECT (layout)); -}*/ + num_digits = MAX (num_digits, 2); + + if (num_digits != lr->priv->num_digits) + { + gchar *markup; + gint size; + + lr->priv->num_digits = num_digits; + + markup = g_strdup_printf ("%d %d", + lr->priv->line_old, + lr->priv->line_new); + + measure_text (lr, markup, NULL, &size, NULL); + g_free (markup); + + gtk_source_gutter_renderer_set_size (GTK_SOURCE_GUTTER_RENDERER (lr), + size); + } +} + +static void +on_buffer_changed (GtkSourceBuffer *buffer, + GitgDiffLineRenderer *renderer) +{ + recalculate_size (renderer); +} + +static void +gitg_diff_line_renderer_change_buffer (GtkSourceGutterRenderer *renderer, + GtkTextBuffer *old_buffer) +{ + GitgDiffLineRenderer *lr; + GtkTextView *view; + + lr = GITG_DIFF_LINE_RENDERER (renderer); + + if (old_buffer) + { + g_signal_handler_disconnect (old_buffer, + lr->priv->changed_handler_id); + } + + view = gtk_source_gutter_renderer_get_view (renderer); + + if (view) + { + GtkTextBuffer *buffer; + + buffer = gtk_text_view_get_buffer (view); + + if (buffer) + { + lr->priv->changed_handler_id = + g_signal_connect (buffer, + "changed", + G_CALLBACK (on_buffer_changed), + lr); + + recalculate_size (lr); + } + } +} static void gitg_diff_line_renderer_class_init (GitgDiffLineRendererClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkSourceGutterRendererClass *gutter_renderer_class = GTK_SOURCE_GUTTER_RENDERER_CLASS (klass); + GtkSourceGutterRendererClass *renderer_class = GTK_SOURCE_GUTTER_RENDERER_CLASS (klass); - gutter_renderer_class->draw = gitg_diff_line_renderer_draw_impl; + renderer_class->begin = gitg_diff_line_renderer_begin; + renderer_class->draw = gitg_diff_line_renderer_draw; + renderer_class->end= gitg_diff_line_renderer_end; + renderer_class->change_buffer = gitg_diff_line_renderer_change_buffer; object_class->set_property = gitg_diff_line_renderer_set_property; object_class->get_property = gitg_diff_line_renderer_get_property; - object_class->constructed = gitg_diff_line_renderer_constructed; - object_class->dispose = gitg_diff_line_renderer_dispose; + object_class->finalize = gitg_diff_line_renderer_finalize; g_object_class_install_property (object_class, PROP_LINE_OLD, From 6765c8d5ff45d56b041c9a6df8dd77decffd00a6 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 24 Feb 2011 12:31:40 +0100 Subject: [PATCH 27/65] Remove has-separator property. This property was removed in gtk3. --- gitg/gitg-repository.ui | 1 - gitg/gitg-tag.ui | 1 - 2 files changed, 2 deletions(-) diff --git a/gitg/gitg-repository.ui b/gitg/gitg-repository.ui index b619954f..f0b3b30f 100644 --- a/gitg/gitg-repository.ui +++ b/gitg/gitg-repository.ui @@ -23,7 +23,6 @@ 500 300 normal - False True diff --git a/gitg/gitg-tag.ui b/gitg/gitg-tag.ui index 5179e975..5e3a0eef 100644 --- a/gitg/gitg-tag.ui +++ b/gitg/gitg-tag.ui @@ -10,7 +10,6 @@ 200 True normal - False True From c752a8d231151bb906f5f22a2cf001908a156af1 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 24 Feb 2011 20:01:48 +0100 Subject: [PATCH 28/65] Do not check for gconf. --- configure.ac | 2 -- 1 file changed, 2 deletions(-) diff --git a/configure.ac b/configure.ac index 1b075cff..505e43c7 100644 --- a/configure.ac +++ b/configure.ac @@ -24,7 +24,6 @@ AM_MAINTAINER_MODE AC_CONFIG_HEADERS(config.h) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) -AC_PATH_PROG(GCONFTOOL, gconftool-2) AC_PROG_LIBTOOL AC_ISC_POSIX @@ -48,7 +47,6 @@ GETTEXT_PACKAGE=gitg AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package]) - AC_CHECK_LIB([m], [sinf]) GLIB_REQUIRED_VERSION=2.26 From a4716005b6a0a8417724f0384e53455754acadcb Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Sat, 26 Feb 2011 10:25:35 +0100 Subject: [PATCH 29/65] Bump gtk+ to 3.0 and gtksourceview to 2.91.7 --- configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 505e43c7..7c9d7e70 100644 --- a/configure.ac +++ b/configure.ac @@ -50,8 +50,8 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package]) AC_CHECK_LIB([m], [sinf]) GLIB_REQUIRED_VERSION=2.26 -GTK_REQUIRED_VERSION=2.90.0 -GTKSOURCEVIEW_REQUIRED_VERSION=2.91.4 +GTK_REQUIRED_VERSION=3.0.0 +GTKSOURCEVIEW_REQUIRED_VERSION=2.91.7 PKG_CHECK_MODULES(GITG, [ gtk+-3.0 >= $GTK_REQUIRED_VERSION From 0b14e3f76b37d35b591cf2e104f18255ce2695a4 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Sat, 26 Feb 2011 10:31:31 +0100 Subject: [PATCH 30/65] Release 0.2.0 --- NEWS | 6 ++++++ README | 6 +++--- configure.ac | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 04504d15..1ae34c21 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ += gitg 0.2.0 = +Version 0.2.0 was released on 2011-02-26 + +== Features == + * Port gitg to gtk+ 3 + = gitg 0.1.0 = Version 0.1.0 was released on 2011-01-13 diff --git a/README b/README index 9b79af31..a77cb42c 100644 --- a/README +++ b/README @@ -3,7 +3,7 @@ gitg is a GitX clone for GNOME/gtk+. It aims at being a small, fast and convenient tool to visualize git history and actions that benefit from a graphical presentation. -The latest version of gitg is 0.1.0. +The latest version of gitg is 0.2.0. Website: http://trac.novowork.com/gitg Bugs: http://bugzilla.gnome.org/browse.cgi?product=gitg @@ -15,8 +15,8 @@ To install the latest version of gitg, make sure to download gitg-0.0.6.tar.bz2 from the download site. After downloading the following procedure installs gitg: - $ tar -xjf gitg-0.1.0.tar.bz2 - $ cd gitg-0.1.0 + $ tar -xjf gitg-0.2.0.tar.bz2 + $ cd gitg-0.2.0 $ ./configure $ make $ sudo make install diff --git a/configure.ac b/configure.ac index 7c9d7e70..2cff5b2c 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) m4_define(gitg_major_version, 0) -m4_define(gitg_minor_version, 1) +m4_define(gitg_minor_version, 2) m4_define(gitg_micro_version, 0) m4_define(gitg_version, gitg_major_version.gitg_minor_version.gitg_micro_version) From cdeef6ffd7e77f82bcf3434f3fb40f7cbdc45b00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Sat, 26 Feb 2011 14:39:41 +0000 Subject: [PATCH 31/65] build: Update autotools configuration --- Makefile.am | 2 ++ autogen.sh | 2 +- configure.ac | 31 ++++++++++++++++++------------- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/Makefile.am b/Makefile.am index a3a9d144..8a1de3d5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,7 @@ ## Process this file with automake to produce Makefile.in +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} + SUBDIRS = libgitg gitg data po tests tools pkgconfigdir = $(libdir)/pkgconfig diff --git a/autogen.sh b/autogen.sh index b904324d..942dff92 100755 --- a/autogen.sh +++ b/autogen.sh @@ -19,4 +19,4 @@ which gnome-autogen.sh || { exit 1 } -ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I m4" REQUIRED_AUTOMAKE_VERSION=1.8 USE_GNOME2_MACROS=1 USE_COMMON_DOC_BUILD=yes . gnome-autogen.sh +. gnome-autogen.sh diff --git a/configure.ac b/configure.ac index 2cff5b2c..3190ac73 100644 --- a/configure.ac +++ b/configure.ac @@ -1,15 +1,22 @@ dnl Process this file with autoconf to produce a configure script. -AC_PREREQ(2.59) +AC_PREREQ([2.64]) m4_define(gitg_major_version, 0) m4_define(gitg_minor_version, 2) m4_define(gitg_micro_version, 0) m4_define(gitg_version, gitg_major_version.gitg_minor_version.gitg_micro_version) -AC_INIT(gitg, gitg_version, http://www.icecrew.nl) -AC_CONFIG_SRCDIR(gitg/gitg.c) +AC_INIT([gitg], + [gitg_version], + [https://bugzilla.gnome.org/enter_bug.cgi?product=gitg], + [gitg], + [http://live.gnome.org/Gitg]) + +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_SRCDIR([gitg/gitg.c]) AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_AUX_DIR([build-aux]) AC_DEFINE(GITG_MAJOR_VERSION, gitg_major_version, [GitG major version]) AC_SUBST(GITG_MAJOR_VERSION, gitg_major_version) @@ -18,15 +25,12 @@ AC_SUBST(GITG_MINOR_VERSION, gitg_minor_version) AC_DEFINE(GITG_MICRO_VERSION, gitg_micro_version, [GitG micro version]) AC_SUBST(GITG_MICRO_VERSION, gitg_micro_version) -AM_INIT_AUTOMAKE([1.8 dist-bzip2 no-dist-gzip]) +AM_INIT_AUTOMAKE([1.11 dist-bzip2 no-dist-gzip]) +AM_MAINTAINER_MODE([enable]) -AM_MAINTAINER_MODE -AC_CONFIG_HEADERS(config.h) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) +AM_SILENT_RULES([yes]) -AC_PROG_LIBTOOL - -AC_ISC_POSIX +# Check for programs AC_PROG_CC AC_PROG_INSTALL AC_PROG_MAKE_SET @@ -34,8 +38,9 @@ AC_PATH_PROG(GZIP, gzip) AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums) -dnl make sure we keep ACLOCAL_FLAGS around for maintainer builds to work -AC_SUBST(ACLOCAL_AMFLAGS, "$ACLOCAL_FLAGS -I m4") +# Initialize libtool +LT_PREREQ([2.2]) +LT_INIT # i18n stuff IT_PROG_INTLTOOL([0.40.0]) @@ -70,7 +75,7 @@ PKG_CHECK_MODULES(PACKAGE, [ AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal) -GNOME_COMPILE_WARNINGS(yes) +GNOME_COMPILE_WARNINGS([maximum]) if test "x$USE_MAINTAINER_MODE" = "xyes"; then PACKAGE_CFLAGS="$PACKAGE_CFLAGS -Wall -Werror -Wuninitialized -Wmissing-declarations" From 834fa17df4c94d69680cb4040bf79902dc979927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Sat, 26 Feb 2011 15:23:30 +0000 Subject: [PATCH 32/65] Use the PACKAGE_URL variable in about dialog --- gitg/gitg-window.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 6e11ab08..5f13d4f7 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -2225,8 +2225,8 @@ on_help_about (GtkAction *action, "copyright", copyright, "comments", _ (comments), "version", VERSION, - "website", "http://trac.novowork.com/gitg", - "website-label", "trac.novowork.com/gitg", + "website", PACKAGE_URL, + "website-label", "gitg homepage", "logo", pixbuf, "license-type", GTK_LICENSE_GPL_2_0, NULL); From c44f55e27a90156b8cb6ff2e65fda40191869a3d Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 20 Mar 2011 09:32:29 -0700 Subject: [PATCH 33/65] Adjust to GtkSourceView API break --- configure.ac | 2 +- gitg/gitg-diff-line-renderer.c | 2 +- gitg/gitg-diff-view.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 3190ac73..4d06480f 100644 --- a/configure.ac +++ b/configure.ac @@ -56,7 +56,7 @@ AC_CHECK_LIB([m], [sinf]) GLIB_REQUIRED_VERSION=2.26 GTK_REQUIRED_VERSION=3.0.0 -GTKSOURCEVIEW_REQUIRED_VERSION=2.91.7 +GTKSOURCEVIEW_REQUIRED_VERSION=2.91.8 PKG_CHECK_MODULES(GITG, [ gtk+-3.0 >= $GTK_REQUIRED_VERSION diff --git a/gitg/gitg-diff-line-renderer.c b/gitg/gitg-diff-line-renderer.c index ee83de20..0547704c 100644 --- a/gitg/gitg-diff-line-renderer.c +++ b/gitg/gitg-diff-line-renderer.c @@ -48,7 +48,7 @@ struct _GitgDiffLineRendererPrivate glong changed_handler_id; }; -G_DEFINE_TYPE (GitgDiffLineRenderer, gitg_diff_line_renderer, GTK_TYPE_SOURCE_GUTTER_RENDERER) +G_DEFINE_TYPE (GitgDiffLineRenderer, gitg_diff_line_renderer, GTK_SOURCE_TYPE_GUTTER_RENDERER) static void gitg_diff_line_renderer_set_property (GObject *object, diff --git a/gitg/gitg-diff-view.c b/gitg/gitg-diff-view.c index 49e71d9b..d4628575 100644 --- a/gitg/gitg-diff-view.c +++ b/gitg/gitg-diff-view.c @@ -142,7 +142,7 @@ struct _GitgDiffViewPrivate GDestroyNotify label_func_destroy_notify; }; -G_DEFINE_TYPE (GitgDiffView, gitg_diff_view, GTK_TYPE_SOURCE_VIEW) +G_DEFINE_TYPE (GitgDiffView, gitg_diff_view, GTK_SOURCE_TYPE_VIEW) static gboolean gitg_diff_view_draw (GtkWidget *widget, cairo_t *cr); static guint diff_view_signals[NUM_SIGNALS] = {0,}; From 52d0a2d3f2b6ec1888b14ea6698a225af009d70b Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Mon, 21 Mar 2011 09:07:37 -0700 Subject: [PATCH 34/65] Fix preferences dialog --- gitg/gitg-preferences.ui | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gitg/gitg-preferences.ui b/gitg/gitg-preferences.ui index 35f40008..a9f8039f 100644 --- a/gitg/gitg-preferences.ui +++ b/gitg/gitg-preferences.ui @@ -32,6 +32,7 @@ True True + True True @@ -104,6 +105,7 @@ True 6 + False True @@ -302,6 +304,7 @@ True 6 + False True @@ -510,6 +513,7 @@ True 6 + False True From fa1e665272b38465168199dbb05d2def03241504 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Mon, 21 Mar 2011 09:09:12 -0700 Subject: [PATCH 35/65] Fix link button activation --- gitg/gitg-revision-details-panel.c | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/gitg/gitg-revision-details-panel.c b/gitg/gitg-revision-details-panel.c index 93c91048..67b52da4 100644 --- a/gitg/gitg-revision-details-panel.c +++ b/gitg/gitg-revision-details-panel.c @@ -25,6 +25,7 @@ #include "gitg-utils.h" #include "gitg-revision-panel.h" #include "gitg-stat-view.h" +#include "gitg-uri.h" #include #include @@ -238,6 +239,57 @@ on_shell_begin (GitgShell *shell, g_object_unref (cursor); } +static gboolean +link_button_activate_link_cb (GtkLinkButton *button, + GitgWindow *window) +{ + const gchar *uri; + GFile *file; + GitgRepository *repository; + gchar *work_tree_path; + gchar *selection; + gchar *activatable; + gchar *action; + + uri = gtk_link_button_get_uri (button); + file = g_file_new_for_uri (uri); + repository = gitg_window_get_repository (window); + + if (g_file_has_uri_scheme (file, "gitg") && + gitg_uri_parse (uri, &work_tree_path, &selection, + &activatable, &action)) + { + GFile *wt; + GFile *work_tree; + gboolean equal; + + wt = gitg_repository_get_work_tree (repository); + work_tree = g_file_new_for_path (work_tree_path); + equal = g_file_equal (wt, work_tree); + + g_object_unref (wt); + g_object_unref (work_tree); + + if (equal) + { + gitg_window_select (window, selection); + gitg_window_activate (window, activatable, action); + } + + g_free (work_tree_path); + g_free (selection); + g_free (activatable); + g_free (action); + g_object_unref (file); + + return TRUE; + } + + g_object_unref (file); + + return FALSE; +} + static void make_stats_table (GitgRevisionDetailsPanel *panel) { @@ -316,6 +368,10 @@ make_stats_table (GitgRevisionDetailsPanel *panel) gtk_button_set_alignment (GTK_BUTTON (file), 0, 0.5); + g_signal_connect (file, + "activate-link", + G_CALLBACK (link_button_activate_link_cb), + panel->priv->window); total_str = g_strdup_printf ("%d", info->added + info->removed); total = gtk_label_new (total_str); From 9a98434dc2ca7e055bb2ab109e9c8f182a1e7171 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Thu, 24 Mar 2011 12:44:24 +0100 Subject: [PATCH 36/65] Improved debugging --- configure.ac | 11 ++++++++ libgitg/gitg-debug.c | 37 +++++++++++++++++++++++--- libgitg/gitg-debug.h | 22 ++++++++++++++- libgitg/gitg-line-parser.c | 3 +++ libgitg/gitg-runner.c | 7 ++--- libgitg/gitg-smart-charset-converter.c | 19 ++++++++++--- 6 files changed, 87 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index 4d06480f..cda16cd3 100644 --- a/configure.ac +++ b/configure.ac @@ -100,6 +100,17 @@ fi PACKAGE_LIBS="$PACKAGE_LIBS -lm" + +AC_ARG_ENABLE(debug, + [AS_HELP_STRING([--disable-debug], + [disable debug information [default=yes]])], + [enable_debug=$enableval], [enable_debug=yes]) + +if test "$enable_debug" = "yes"; then + PACKAGE_CFLAGS="$PACKAGE_CFLAGS -g" + AC_DEFINE([ENABLE_DEBUG],[1],[Whether debugging support is enabled]) +fi + AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) diff --git a/libgitg/gitg-debug.c b/libgitg/gitg-debug.c index 175d035e..fb4c45c1 100644 --- a/libgitg/gitg-debug.c +++ b/libgitg/gitg-debug.c @@ -22,19 +22,24 @@ #include "gitg-debug.h" #include +#include static guint debug_enabled = GITG_DEBUG_NONE; #define DEBUG_FROM_ENV(name) \ - { \ - if (g_getenv(#name)) \ - debug_enabled |= name; \ + { \ + if (g_getenv(#name)) \ + { \ + debug_enabled |= name; \ + } \ } void gitg_debug_init (void) { - DEBUG_FROM_ENV(GITG_DEBUG_RUNNER); + DEBUG_FROM_ENV (GITG_DEBUG_SHELL); + DEBUG_FROM_ENV (GITG_DEBUG_SHELL_OUTPUT); + DEBUG_FROM_ENV (GITG_DEBUG_CHARSET_CONVERSION); } gboolean @@ -42,3 +47,27 @@ gitg_debug_enabled (guint debug) { return debug_enabled & debug; } + +void +gitg_debug_message (guint level, + gchar const *file, + gint line, + gchar const *function, + gchar const *format, + ...) +{ + if (G_UNLIKELY (debug_enabled & level)) + { + va_list ap; + gchar *msg; + + va_start (ap, format); + msg = g_strdup_vprintf (format, ap); + va_end (ap); + + g_print ("%s:%d (%s) %s\n", file, line, function, msg); + fflush (stdout); + + g_free (msg); + } +} diff --git a/libgitg/gitg-debug.h b/libgitg/gitg-debug.h index 5c5a4935..e2ff3c67 100644 --- a/libgitg/gitg-debug.h +++ b/libgitg/gitg-debug.h @@ -24,15 +24,35 @@ #define __GITG_DEBUG_H__ #include +#include enum { GITG_DEBUG_NONE = 0, - GITG_DEBUG_RUNNER = 1 << 0 + GITG_DEBUG_SHELL = 1 << 0, + GITG_DEBUG_SHELL_OUTPUT = 1 << 1, + GITG_DEBUG_CHARSET_CONVERSION = 1 << 2 }; +#if ENABLE_DEBUG void gitg_debug_init (void); gboolean gitg_debug_enabled (guint debug); +void gitg_debug_message (guint level, + gchar const *file, + gint line, + gchar const *function, + gchar const *format, + ...); + +#define gitg_debug(level,format,args...) gitg_debug_message (level, __FILE__, __LINE__, G_STRFUNC, format, args) +#else + +#define gitg_debug_init ; +#define gitg_debug_enabled(x) FALSE +#define gitg_debug(level,format,args...) ; + +#endif + #endif /* __GITG_DEBUG_H__ */ diff --git a/libgitg/gitg-line-parser.c b/libgitg/gitg-line-parser.c index 5526ce11..889aedac 100644 --- a/libgitg/gitg-line-parser.c +++ b/libgitg/gitg-line-parser.c @@ -21,6 +21,7 @@ */ #include "gitg-line-parser.h" +#include #define GITG_LINE_PARSER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GITG_TYPE_LINE_PARSER, GitgLineParserPrivate)) @@ -212,6 +213,8 @@ parse_lines (GitgLineParser *stream, stream->priv->lines[i++] = g_strndup (ptr, newline - ptr); } + gitg_debug (GITG_DEBUG_SHELL_OUTPUT, "%s", stream->priv->lines[i - 1]); + ptr = line_end; if (i == stream->priv->buffer_size) diff --git a/libgitg/gitg-runner.c b/libgitg/gitg-runner.c index 80450c64..6bd2b76d 100644 --- a/libgitg/gitg-runner.c +++ b/libgitg/gitg-runner.c @@ -446,7 +446,7 @@ gitg_runner_run (GitgRunner *runner) (gchar **)gitg_command_get_arguments (runner->priv->command), (gchar **)gitg_command_get_environment (runner->priv->command), G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD | - (gitg_debug_enabled (GITG_DEBUG_RUNNER) ? 0 : G_SPAWN_STDERR_TO_DEV_NULL), + (gitg_debug_enabled (GITG_DEBUG_SHELL) ? 0 : G_SPAWN_STDERR_TO_DEV_NULL), NULL, NULL, &(runner->priv->pid), @@ -476,8 +476,9 @@ gitg_runner_run (GitgRunner *runner) runner->priv->cancellable = g_cancellable_new (); - runner->priv->stdin = G_OUTPUT_STREAM (g_unix_output_stream_new (stdinf, - TRUE)); + runner->priv->stdin = + G_OUTPUT_STREAM (g_unix_output_stream_new (stdinf, + TRUE)); data = async_data_new (runner); diff --git a/libgitg/gitg-smart-charset-converter.c b/libgitg/gitg-smart-charset-converter.c index 29cbad2d..6f98fed5 100644 --- a/libgitg/gitg-smart-charset-converter.c +++ b/libgitg/gitg-smart-charset-converter.c @@ -21,6 +21,7 @@ */ #include "gitg-smart-charset-converter.h" +#include "gitg-debug.h" #include #include @@ -278,10 +279,18 @@ guess_encoding (GitgSmartCharsetConverter *smart, /* Try to convert */ if (try_convert (conv, inbuf, inbuf_size)) { + gitg_debug (GITG_DEBUG_CHARSET_CONVERSION, + "Guessed %s conversion", + gitg_encoding_get_charset (enc)); break; } } + if (smart->priv->is_utf8) + { + gitg_debug (GITG_DEBUG_CHARSET_CONVERSION, "%s", "Guessed UTF8 conversion"); + } + if (conv != NULL) { g_converter_reset (G_CONVERTER (conv)); @@ -307,15 +316,13 @@ gitg_smart_charset_converter_convert (GConverter *converter, GitgSmartCharsetConverter *smart = GITG_SMART_CHARSET_CONVERTER (converter); /* Guess the encoding if we didn't make it yet */ - if (smart->priv->charset_conv == NULL && - !smart->priv->is_utf8) + if (smart->priv->charset_conv == NULL && !smart->priv->is_utf8) { smart->priv->charset_conv = guess_encoding (smart, inbuf, inbuf_size); /* If we still have the previous case is that we didn't guess anything */ - if (smart->priv->charset_conv == NULL && - !smart->priv->is_utf8) + if (smart->priv->charset_conv == NULL && !smart->priv->is_utf8) { g_set_error_literal (error, GITG_CHARSET_CONVERSION_ERROR, GITG_CHARSET_CONVERSION_ERROR_ENCODING_AUTO_DETECTION_FAILED, @@ -340,9 +347,13 @@ gitg_smart_charset_converter_convert (GConverter *converter, ret = G_CONVERTER_CONVERTED; if (flags & G_CONVERTER_INPUT_AT_END) + { ret = G_CONVERTER_FINISHED; + } else if (flags & G_CONVERTER_FLUSH) + { ret = G_CONVERTER_FLUSHED; + } return ret; } From f07d9d708f87c52ea93098732d6c0dc08c63e9a2 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Thu, 24 Mar 2011 12:44:38 +0100 Subject: [PATCH 37/65] Add UTF8 as the first candidate encoding --- libgitg/gitg-encodings.c | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/libgitg/gitg-encodings.c b/libgitg/gitg-encodings.c index 48c89880..7c3411f8 100644 --- a/libgitg/gitg-encodings.c +++ b/libgitg/gitg-encodings.c @@ -293,7 +293,9 @@ gitg_encoding_lazy_init (void) const gchar *locale_charset; if (initialized) + { return; + } if (g_get_charset (&locale_charset) == FALSE) { @@ -313,24 +315,33 @@ gitg_encoding_get_from_charset (const gchar *charset) gitg_encoding_lazy_init (); if (charset == NULL) + { return NULL; + } if (g_ascii_strcasecmp (charset, "UTF-8") == 0) + { return gitg_encoding_get_utf8 (); + } + + i = 0; - i = 0; while (i < GITG_ENCODING_LAST) { if (g_ascii_strcasecmp (charset, encodings[i].charset) == 0) + { return &encodings[i]; - + } + ++i; } if (unknown_encoding.charset != NULL) { if (g_ascii_strcasecmp (charset, unknown_encoding.charset) == 0) + { return &unknown_encoding; + } } return NULL; @@ -351,6 +362,9 @@ gitg_encoding_get_candidates (void) ret = g_slist_prepend (ret, (gpointer)gitg_encoding_get_current ()); + + ret = g_slist_prepend (ret, + (gpointer)gitg_encoding_get_utf8 ()); } return ret; @@ -362,7 +376,9 @@ gitg_encoding_get_from_index (gint idx) g_return_val_if_fail (idx >= 0, NULL); if (idx >= GITG_ENCODING_LAST) + { return NULL; + } gitg_encoding_lazy_init (); @@ -388,12 +404,14 @@ gitg_encoding_get_current (void) gitg_encoding_lazy_init (); if (initialized != FALSE) + { return locale_encoding; + } if (g_get_charset (&locale_charset) == FALSE) { g_return_val_if_fail (locale_charset != NULL, &utf8_encoding); - + locale_encoding = gitg_encoding_get_from_charset (locale_charset); } else @@ -424,14 +442,18 @@ gitg_encoding_to_string (const GitgEncoding* enc) if (enc->name != NULL) { - return g_strdup_printf ("%s (%s)", _(enc->name), enc->charset); + return g_strdup_printf ("%s (%s)", _(enc->name), enc->charset); } else { if (g_ascii_strcasecmp (enc->charset, "ANSI_X3.4-1968") == 0) + { return g_strdup_printf ("US-ASCII (%s)", enc->charset); + } else + { return g_strdup (enc->charset); + } } } @@ -510,8 +532,9 @@ _gitg_encoding_strv_to_list (const gchar * const *enc_str) if (enc != NULL) { if (!data_exists (res, (gpointer)enc)) + { res = g_slist_prepend (res, (gpointer)enc); - + } } } From 52f1355ab83346221ed77458deb5a2b50141a067 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Thu, 24 Mar 2011 12:49:36 +0100 Subject: [PATCH 38/65] Fixed debug macro to accept only format string --- libgitg/gitg-debug.h | 4 ++-- libgitg/gitg-smart-charset-converter.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libgitg/gitg-debug.h b/libgitg/gitg-debug.h index e2ff3c67..2dfa5758 100644 --- a/libgitg/gitg-debug.h +++ b/libgitg/gitg-debug.h @@ -45,12 +45,12 @@ void gitg_debug_message (guint level, gchar const *format, ...); -#define gitg_debug(level,format,args...) gitg_debug_message (level, __FILE__, __LINE__, G_STRFUNC, format, args) +#define gitg_debug(level,args...) gitg_debug_message (level, __FILE__, __LINE__, G_STRFUNC, args) #else #define gitg_debug_init ; #define gitg_debug_enabled(x) FALSE -#define gitg_debug(level,format,args...) ; +#define gitg_debug(level,args...) ; #endif diff --git a/libgitg/gitg-smart-charset-converter.c b/libgitg/gitg-smart-charset-converter.c index 6f98fed5..dc07c250 100644 --- a/libgitg/gitg-smart-charset-converter.c +++ b/libgitg/gitg-smart-charset-converter.c @@ -288,7 +288,7 @@ guess_encoding (GitgSmartCharsetConverter *smart, if (smart->priv->is_utf8) { - gitg_debug (GITG_DEBUG_CHARSET_CONVERSION, "%s", "Guessed UTF8 conversion"); + gitg_debug (GITG_DEBUG_CHARSET_CONVERSION, "Guessed UTF8 conversion"); } if (conv != NULL) From 5630872a8c768ea4e46d76fa2006822e0e7035bf Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Thu, 24 Mar 2011 13:13:58 +0100 Subject: [PATCH 39/65] Preserve line endings in gitg config --- libgitg/gitg-config.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libgitg/gitg-config.c b/libgitg/gitg-config.c index 5a07b703..87b68ca7 100644 --- a/libgitg/gitg-config.c +++ b/libgitg/gitg-config.c @@ -139,6 +139,7 @@ gitg_config_init (GitgConfig *self) self->priv = GITG_CONFIG_GET_PRIVATE (self); self->priv->shell = gitg_shell_new_synchronized (1000); + gitg_shell_set_preserve_line_endings (self->priv->shell, TRUE); self->priv->accumulated = g_string_new (""); From 8371e886d61d235e8ef2aa526eba910a436c791c Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Fri, 25 Mar 2011 09:56:33 +0100 Subject: [PATCH 40/65] Release 0.2.1 --- NEWS | 10 ++++++++++ README | 6 +++--- configure.ac | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 1ae34c21..c705bc3b 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,13 @@ += gitg 0.2.1 = +Version 0.2.1 was released on 2011-03-25 + +== Features == + * Improved debugging + * Add UTF8 as the first candidate encoding + +== Bug fixes == + * Adjust to GtkSourceView API break + = gitg 0.2.0 = Version 0.2.0 was released on 2011-02-26 diff --git a/README b/README index a77cb42c..d1064066 100644 --- a/README +++ b/README @@ -3,7 +3,7 @@ gitg is a GitX clone for GNOME/gtk+. It aims at being a small, fast and convenient tool to visualize git history and actions that benefit from a graphical presentation. -The latest version of gitg is 0.2.0. +The latest version of gitg is 0.2.1. Website: http://trac.novowork.com/gitg Bugs: http://bugzilla.gnome.org/browse.cgi?product=gitg @@ -15,8 +15,8 @@ To install the latest version of gitg, make sure to download gitg-0.0.6.tar.bz2 from the download site. After downloading the following procedure installs gitg: - $ tar -xjf gitg-0.2.0.tar.bz2 - $ cd gitg-0.2.0 + $ tar -xjf gitg-0.2.1.tar.bz2 + $ cd gitg-0.2.1 $ ./configure $ make $ sudo make install diff --git a/configure.ac b/configure.ac index cda16cd3..ed500b00 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ AC_PREREQ([2.64]) m4_define(gitg_major_version, 0) m4_define(gitg_minor_version, 2) -m4_define(gitg_micro_version, 0) +m4_define(gitg_micro_version, 1) m4_define(gitg_version, gitg_major_version.gitg_minor_version.gitg_micro_version) AC_INIT([gitg], From 44ceac4e8e2b570cf9ac3aa19fff3a6b92ad1c38 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Fri, 25 Mar 2011 14:18:52 +0100 Subject: [PATCH 41/65] Disable auto-utf8 for repository loading git already converts to utf-8 and having the double encoding will make things twice as slow due to unnecessary copies --- libgitg/gitg-repository.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libgitg/gitg-repository.c b/libgitg/gitg-repository.c index 7a950d7a..d9af1d3e 100644 --- a/libgitg/gitg-repository.c +++ b/libgitg/gitg-repository.c @@ -1301,6 +1301,7 @@ gitg_repository_init (GitgRepository *object) (GDestroyNotify)free_refs); object->priv->loader = gitg_shell_new (10000); + gitg_io_set_auto_utf8 (GITG_IO (object->priv->loader), FALSE); g_signal_connect (object->priv->loader, "update", From 7809507fd6017a64ebea0bc8eb30fe3605d4ed34 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Sun, 27 Mar 2011 11:19:09 +0200 Subject: [PATCH 42/65] Added missing set_auto_utf8 --- libgitg/gitg-io.c | 42 +++++++++++++++++++++++++++++++++++++++++- libgitg/gitg-io.h | 3 +++ libgitg/gitg-runner.c | 17 ++++++++++++----- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/libgitg/gitg-io.c b/libgitg/gitg-io.c index d0d19722..c6fbcb75 100644 --- a/libgitg/gitg-io.c +++ b/libgitg/gitg-io.c @@ -33,6 +33,7 @@ struct _GitgIOPrivate guint cancelled : 1; guint running : 1; + guint auto_utf8 : 1; }; enum @@ -43,7 +44,8 @@ enum PROP_OUTPUT, PROP_CANCELLED, PROP_EXIT_STATUS, - PROP_RUNNING + PROP_RUNNING, + PROP_AUTO_UTF8 }; enum @@ -100,6 +102,9 @@ gitg_io_set_property (GObject *object, case PROP_RUNNING: gitg_io_set_running (self, g_value_get_boolean (value)); break; + case PROP_AUTO_UTF8: + gitg_io_set_auto_utf8 (self, g_value_get_boolean (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -131,6 +136,9 @@ gitg_io_get_property (GObject *object, case PROP_RUNNING: g_value_set_boolean (value, self->priv->running); break; + case PROP_AUTO_UTF8: + g_value_set_boolean (value, self->priv->auto_utf8); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -237,6 +245,14 @@ gitg_io_class_init (GitgIOClass *klass) G_TYPE_ERROR); g_type_class_add_private (object_class, sizeof (GitgIOPrivate)); + + g_object_class_install_property (object_class, + PROP_AUTO_UTF8, + g_param_spec_boolean ("auto-utf8", + "Auto Utf8", + "Auto utf8", + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); } static void @@ -425,3 +441,27 @@ gitg_io_set_running (GitgIO *io, g_object_notify (G_OBJECT (io), "running"); } } + +void +gitg_io_set_auto_utf8 (GitgIO *io, + gboolean auto_utf8) +{ + g_return_if_fail (GITG_IS_IO (io)); + + if (io->priv->auto_utf8 == auto_utf8) + { + return; + } + + io->priv->auto_utf8 = auto_utf8; + + g_object_notify (G_OBJECT (io), "auto-utf8"); +} + +gboolean +gitg_io_get_auto_utf8 (GitgIO *io) +{ + g_return_val_if_fail (GITG_IS_IO (io), FALSE); + + return io->priv->auto_utf8; +} diff --git a/libgitg/gitg-io.h b/libgitg/gitg-io.h index 43afead8..620b43ce 100644 --- a/libgitg/gitg-io.h +++ b/libgitg/gitg-io.h @@ -87,6 +87,9 @@ void gitg_io_set_exit_status (GitgIO *io, gint status); gboolean gitg_io_get_running (GitgIO *io); void gitg_io_set_running (GitgIO *io, gboolean running); +void gitg_io_set_auto_utf8 (GitgIO *io, gboolean auto_utf8); +gboolean gitg_io_get_auto_utf8 (GitgIO *io); + G_END_DECLS #endif /* __GITG_IO_H__ */ diff --git a/libgitg/gitg-runner.c b/libgitg/gitg-runner.c index 6bd2b76d..46883a93 100644 --- a/libgitg/gitg-runner.c +++ b/libgitg/gitg-runner.c @@ -496,13 +496,20 @@ gitg_runner_run (GitgRunner *runner) output = G_INPUT_STREAM (g_unix_input_stream_new (stdoutf, TRUE)); - smart = gitg_smart_charset_converter_new (gitg_encoding_get_candidates ()); + if (gitg_io_get_auto_utf8 (GITG_IO (runner))) + { + smart = gitg_smart_charset_converter_new (gitg_encoding_get_candidates ()); - runner->priv->stdout = g_converter_input_stream_new (output, - G_CONVERTER (smart)); + runner->priv->stdout = g_converter_input_stream_new (output, + G_CONVERTER (smart)); - g_object_unref (smart); - g_object_unref (output); + g_object_unref (smart); + g_object_unref (output); + } + else + { + runner->priv->stdout = output; + } end_output = gitg_io_get_output (GITG_IO (runner)); From e3ab4e78ff4db0ef0696a7afbaaa89b84569ebf4 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Sun, 27 Mar 2011 11:21:55 +0200 Subject: [PATCH 43/65] Added better debugging for gitg-config --- libgitg/gitg-config.c | 41 +++++++++++++++++++++++++++++++++-------- libgitg/gitg-debug.c | 1 + libgitg/gitg-debug.h | 3 ++- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/libgitg/gitg-config.c b/libgitg/gitg-config.c index 87b68ca7..56d2f324 100644 --- a/libgitg/gitg-config.c +++ b/libgitg/gitg-config.c @@ -22,6 +22,7 @@ #include "gitg-config.h" #include "gitg-shell.h" +#include "gitg-debug.h" #define GITG_CONFIG_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GITG_TYPE_CONFIG, GitgConfigPrivate)) @@ -196,7 +197,10 @@ get_value_global (GitgConfig *config, gchar const *key) if (error) { - g_warning ("Failed to get config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to get config: %s", + error->message); + g_error_free (error); } @@ -223,7 +227,10 @@ get_value_global_regex (GitgConfig *config, if (error) { - g_warning ("Failed to get config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to get config: %s", + error->message); + g_error_free (error); } @@ -255,7 +262,10 @@ get_value_local (GitgConfig *config, gchar const *key) if (error) { - g_warning ("Failed to get config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to get config: %s", + error->message); + g_error_free (error); } @@ -296,7 +306,10 @@ get_value_local_regex (GitgConfig *config, if (error) { - g_warning ("Failed to get config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to get config: %s", + error->message); + g_error_free (error); } @@ -326,7 +339,10 @@ set_value_global (GitgConfig *config, gchar const *key, gchar const *value) if (error) { - g_warning ("Failed to get config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to get config: %s", + error->message); + g_error_free (error); } @@ -359,7 +375,10 @@ set_value_local (GitgConfig *config, gchar const *key, gchar const *value) if (error) { - g_warning ("Failed to set config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to set config: %s", + error->message); + g_error_free (error); } @@ -390,7 +409,10 @@ rename_global (GitgConfig *config, gchar const *old, gchar const *nw) if (error) { - g_warning ("Failed to rename config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to rename config: %s", + error->message); + g_error_free (error); } @@ -424,7 +446,10 @@ rename_local (GitgConfig *config, gchar const *old, gchar const *nw) if (error) { - g_warning ("Failed to rename config: %s", error->message); + gitg_debug (GITG_DEBUG_CONFIG, + "Failed to rename config: %s", + error->message); + g_error_free (error); } diff --git a/libgitg/gitg-debug.c b/libgitg/gitg-debug.c index fb4c45c1..6530e7a3 100644 --- a/libgitg/gitg-debug.c +++ b/libgitg/gitg-debug.c @@ -40,6 +40,7 @@ gitg_debug_init (void) DEBUG_FROM_ENV (GITG_DEBUG_SHELL); DEBUG_FROM_ENV (GITG_DEBUG_SHELL_OUTPUT); DEBUG_FROM_ENV (GITG_DEBUG_CHARSET_CONVERSION); + DEBUG_FROM_ENV (GITG_DEBUG_CONFIG); } gboolean diff --git a/libgitg/gitg-debug.h b/libgitg/gitg-debug.h index 2dfa5758..55d4428b 100644 --- a/libgitg/gitg-debug.h +++ b/libgitg/gitg-debug.h @@ -31,7 +31,8 @@ enum GITG_DEBUG_NONE = 0, GITG_DEBUG_SHELL = 1 << 0, GITG_DEBUG_SHELL_OUTPUT = 1 << 1, - GITG_DEBUG_CHARSET_CONVERSION = 1 << 2 + GITG_DEBUG_CHARSET_CONVERSION = 1 << 2, + GITG_DEBUG_CONFIG = 1 << 3 }; #if ENABLE_DEBUG From 8632eea2bb9c1ade2c237983f6cfa497b46666ea Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Sun, 27 Mar 2011 11:40:12 +0200 Subject: [PATCH 44/65] Added description to DOAP file --- gitg.doap | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gitg.doap b/gitg.doap index 781c1671..4e08f1d2 100644 --- a/gitg.doap +++ b/gitg.doap @@ -6,6 +6,9 @@ xmlns="http://usefulinc.com/ns/doap#"> gitg git repository viewer for gtk+/GNOME + gitg is a GitX clone for GNOME/gtk+. It aims at + being a small, fast and convenient tool to visualize git history and actions + that benefit from a graphical presentation. From 694ee6eca13e9af7af83485e644ca064470c1925 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Sun, 27 Mar 2011 17:28:09 +0200 Subject: [PATCH 45/65] Added glade catalog file --- configure.ac | 21 +++++++++++++++++++++ data/Makefile.am | 5 +++++ gitg/gitg-window.ui | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ed500b00..a2fa0f82 100644 --- a/configure.ac +++ b/configure.ac @@ -116,6 +116,26 @@ AC_SUBST(PACKAGE_LIBS) GLIB_GSETTINGS +GLADE_UI_REQUIRED=3.2 + +AC_ARG_ENABLE([glade-catalog], + [AS_HELP_STRING([--enable-glade-catalog[=@<:@no/auto/yes@:>@]], + [Install a glade catalog file [default=auto]])], + [glade_catalog=$enableval], + [glade_catalog="auto"]) + +if test "x$glade_catalog" = "xauto"; then + PKG_CHECK_EXISTS([gladeui-1.0 >= $GLADE_UI_REQUIRED], \ + glade_catalog="yes", glade_catalog="no") +fi + +AM_CONDITIONAL([GLADE_CATALOG], [test "x$glade_catalog" = xyes]) + +AS_IF([test "x$glade_catalog" = xyes], + [PKG_CHECK_MODULES(GLADE, [gladeui-1.0 >= $GLADE_UI_REQUIRED]) + GLADE_CATALOGDIR=`$PKG_CONFIG --variable=catalogdir gladeui-1.0 2>&AS_MESSAGE_LOG_FD` + AC_SUBST(GLADE_CATALOGDIR)]) + AC_CONFIG_FILES([ Makefile libgitg-1.0.pc @@ -138,4 +158,5 @@ Configuration: Source code location: ${srcdir} Compiler: ${CC} + Glade catalog: ${glade_catalog} " diff --git a/data/Makefile.am b/data/Makefile.am index e7127fe2..96b8537a 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -15,6 +15,11 @@ gitgstyles_DATA = gitgstyle.xml gsettings_SCHEMAS = org.gnome.gitg.gschema.xml +if GLADE_CATALOG +catalogdir = $(GLADE_CATALOGDIR) +dist_catalog_DATA = gitg-glade.xml +endif + @INTLTOOL_XML_NOMERGE_RULE@ @GSETTINGS_RULES@ diff --git a/gitg/gitg-window.ui b/gitg/gitg-window.ui index c1bd7983..e77af647 100644 --- a/gitg/gitg-window.ui +++ b/gitg/gitg-window.ui @@ -2,7 +2,7 @@ - + 3 From 507d247a93ea212d744d7fea470ea7c556cee1e9 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Sun, 27 Mar 2011 16:10:03 +0200 Subject: [PATCH 46/65] Disable glade catalog installing by default --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index a2fa0f82..35ff4198 100644 --- a/configure.ac +++ b/configure.ac @@ -122,7 +122,7 @@ AC_ARG_ENABLE([glade-catalog], [AS_HELP_STRING([--enable-glade-catalog[=@<:@no/auto/yes@:>@]], [Install a glade catalog file [default=auto]])], [glade_catalog=$enableval], - [glade_catalog="auto"]) + [glade_catalog="no"]) if test "x$glade_catalog" = "xauto"; then PKG_CHECK_EXISTS([gladeui-1.0 >= $GLADE_UI_REQUIRED], \ From 44118e70aca0dcd1d51c7b6799590caa9a1a7adf Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Sun, 27 Mar 2011 17:36:29 +0200 Subject: [PATCH 47/65] Forgot to add gitg-glade.xml --- data/gitg-glade.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 data/gitg-glade.xml diff --git a/data/gitg-glade.xml b/data/gitg-glade.xml new file mode 100644 index 00000000..0b22393c --- /dev/null +++ b/data/gitg-glade.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + From feefd3cf791d7f22cc45bb03dc0b8616c56e9cdb Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Sun, 27 Mar 2011 17:53:52 +0200 Subject: [PATCH 48/65] Fix glade detection --- configure.ac | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/configure.ac b/configure.ac index 35ff4198..8bb46c04 100644 --- a/configure.ac +++ b/configure.ac @@ -120,21 +120,18 @@ GLADE_UI_REQUIRED=3.2 AC_ARG_ENABLE([glade-catalog], [AS_HELP_STRING([--enable-glade-catalog[=@<:@no/auto/yes@:>@]], - [Install a glade catalog file [default=auto]])], + [Install a glade catalog file [default=no]])], [glade_catalog=$enableval], [glade_catalog="no"]) -if test "x$glade_catalog" = "xauto"; then - PKG_CHECK_EXISTS([gladeui-1.0 >= $GLADE_UI_REQUIRED], \ - glade_catalog="yes", glade_catalog="no") -fi +AM_CONDITIONAL([GLADE_CATALOG], [ test "$glade_catalog" = "yes" ]) -AM_CONDITIONAL([GLADE_CATALOG], [test "x$glade_catalog" = xyes]) - -AS_IF([test "x$glade_catalog" = xyes], - [PKG_CHECK_MODULES(GLADE, [gladeui-1.0 >= $GLADE_UI_REQUIRED]) - GLADE_CATALOGDIR=`$PKG_CONFIG --variable=catalogdir gladeui-1.0 2>&AS_MESSAGE_LOG_FD` - AC_SUBST(GLADE_CATALOGDIR)]) +AS_IF([ test "$glade_catalog" = "yes" ], + [PKG_CHECK_EXISTS(GLADE, [gladeui-2.0 >= $GLADE_UI_REQUIRED]) + AC_MSG_CHECKING([for Glade catalog dir]) + GLADE_CATALOG_DIR=`$PKG_CONFIG --variable=catalogdir gladeui-2.0 2>&AS_MESSAGE_LOG_FD` + AC_MSG_RESULT([$GLADE_CATALOG_DIR]) + AC_SUBST(GLADE_CATALOG_DIR)]) AC_CONFIG_FILES([ Makefile From 3ca1e40d341159413c4d45d5a3d5090daae75dea Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Sun, 27 Mar 2011 17:59:13 +0200 Subject: [PATCH 49/65] Release 0.2.2 --- NEWS | 9 +++++++++ README | 6 +++--- configure.ac | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index c705bc3b..44d235d7 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,12 @@ += gitg 0.2.2 = +Version 0.2.2 was released on 2011-03-27 + +== Features == + * Added glade catalog file + +== Bug fixes == + * Disable auto-utf8 for repository loading + = gitg 0.2.1 = Version 0.2.1 was released on 2011-03-25 diff --git a/README b/README index d1064066..df39a0f4 100644 --- a/README +++ b/README @@ -3,7 +3,7 @@ gitg is a GitX clone for GNOME/gtk+. It aims at being a small, fast and convenient tool to visualize git history and actions that benefit from a graphical presentation. -The latest version of gitg is 0.2.1. +The latest version of gitg is 0.2.2. Website: http://trac.novowork.com/gitg Bugs: http://bugzilla.gnome.org/browse.cgi?product=gitg @@ -15,8 +15,8 @@ To install the latest version of gitg, make sure to download gitg-0.0.6.tar.bz2 from the download site. After downloading the following procedure installs gitg: - $ tar -xjf gitg-0.2.1.tar.bz2 - $ cd gitg-0.2.1 + $ tar -xjf gitg-0.2.2.tar.bz2 + $ cd gitg-0.2.2 $ ./configure $ make $ sudo make install diff --git a/configure.ac b/configure.ac index 8bb46c04..510005fd 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ AC_PREREQ([2.64]) m4_define(gitg_major_version, 0) m4_define(gitg_minor_version, 2) -m4_define(gitg_micro_version, 1) +m4_define(gitg_micro_version, 2) m4_define(gitg_version, gitg_major_version.gitg_minor_version.gitg_micro_version) AC_INIT([gitg], From f5358d7c3d99dde56c0cf3eff7fe3a67173f85cb Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 28 Mar 2011 10:33:13 +0200 Subject: [PATCH 50/65] Fix --disable-debug --- configure.ac | 5 ++++- libgitg/Makefile.am | 5 ++++- libgitg/gitg-debug.h | 2 +- tests/shell.c | 1 + 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 510005fd..cedb81c4 100644 --- a/configure.ac +++ b/configure.ac @@ -106,11 +106,13 @@ AC_ARG_ENABLE(debug, [disable debug information [default=yes]])], [enable_debug=$enableval], [enable_debug=yes]) -if test "$enable_debug" = "yes"; then +if test "x$enable_debug" = "xyes"; then PACKAGE_CFLAGS="$PACKAGE_CFLAGS -g" AC_DEFINE([ENABLE_DEBUG],[1],[Whether debugging support is enabled]) fi +AM_CONDITIONAL(ENABLE_DEBUG, test "x$enable_debug" = "xyes") + AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) @@ -156,4 +158,5 @@ Configuration: Source code location: ${srcdir} Compiler: ${CC} Glade catalog: ${glade_catalog} + Debug enabled: ${enable_debug} " diff --git a/libgitg/Makefile.am b/libgitg/Makefile.am index a6f65725..baf1bfa3 100644 --- a/libgitg/Makefile.am +++ b/libgitg/Makefile.am @@ -51,7 +51,6 @@ C_FILES = \ gitg-commit.c \ gitg-config.c \ gitg-convert.c \ - gitg-debug.c \ gitg-hash.c \ gitg-i18n.c \ gitg-lane.c \ @@ -67,6 +66,10 @@ C_FILES = \ gitg-shell.c \ gitg-line-parser.c +if ENABLE_DEBUG + C_FILES += gitg-debug.c +endif + ENUM_H_FILES = \ gitg-changed-file.h diff --git a/libgitg/gitg-debug.h b/libgitg/gitg-debug.h index 55d4428b..81183b6a 100644 --- a/libgitg/gitg-debug.h +++ b/libgitg/gitg-debug.h @@ -49,7 +49,7 @@ void gitg_debug_message (guint level, #define gitg_debug(level,args...) gitg_debug_message (level, __FILE__, __LINE__, G_STRFUNC, args) #else -#define gitg_debug_init ; +#define gitg_debug_init(args...) ; #define gitg_debug_enabled(x) FALSE #define gitg_debug(level,args...) ; diff --git a/tests/shell.c b/tests/shell.c index 16d7e87c..b2c1ec20 100644 --- a/tests/shell.c +++ b/tests/shell.c @@ -1,5 +1,6 @@ #include #include +#include #define test_add_repo(name, callback) g_test_add (name, RepositoryInfo, NULL, repository_setup, callback, repository_cleanup) From b637b0d50ca0133e2a029f412575e686a9bcdf5e Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 28 Mar 2011 10:39:55 +0200 Subject: [PATCH 51/65] Fix ENABLE_DEBUG use in Makefile.am --- configure.ac | 2 +- libgitg/Makefile.am | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index cedb81c4..1a408c6a 100644 --- a/configure.ac +++ b/configure.ac @@ -111,7 +111,7 @@ if test "x$enable_debug" = "xyes"; then AC_DEFINE([ENABLE_DEBUG],[1],[Whether debugging support is enabled]) fi -AM_CONDITIONAL(ENABLE_DEBUG, test "x$enable_debug" = "xyes") +AM_CONDITIONAL([ENABLE_DEBUG], [test "$enable_debug" = "yes"]) AC_SUBST(PACKAGE_CFLAGS) AC_SUBST(PACKAGE_LIBS) diff --git a/libgitg/Makefile.am b/libgitg/Makefile.am index baf1bfa3..e6e6973d 100644 --- a/libgitg/Makefile.am +++ b/libgitg/Makefile.am @@ -67,7 +67,7 @@ C_FILES = \ gitg-line-parser.c if ENABLE_DEBUG - C_FILES += gitg-debug.c +C_FILES += gitg-debug.c endif ENUM_H_FILES = \ From 2b17d0216903be7d140172944de9fbb74a8109b6 Mon Sep 17 00:00:00 2001 From: Jesse van den Kieboom Date: Mon, 28 Mar 2011 11:22:14 +0200 Subject: [PATCH 52/65] Remove and reattach model while loading repository This vastly improves loading time on large repositories --- gitg/gitg-window.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gitg/gitg-window.c b/gitg/gitg-window.c index 5f13d4f7..33267c58 100644 --- a/gitg/gitg-window.c +++ b/gitg/gitg-window.c @@ -1219,6 +1219,9 @@ on_repository_loaded (GitgRepository *repository, g_free (msg); gdk_window_set_cursor (gtk_widget_get_window (GTK_WIDGET (window->priv->tree_view)), NULL); + gtk_tree_view_set_model (window->priv->tree_view, + GTK_TREE_MODEL (window->priv->repository)); + GitgHash hash = {0,}; if (memcmp (window->priv->select_on_load, hash, GITG_HASH_BINARY_SIZE) != 0) @@ -1708,6 +1711,8 @@ on_repository_load (GitgRepository *repository, on_branches_combo_changed, window); + gtk_tree_view_set_model (window->priv->tree_view, NULL); + update_window_title (window); } @@ -1790,9 +1795,6 @@ load_repository (GitgWindow *window, if ((git_dir || work_tree) && create_repository (window, git_dir, work_tree, selection)) { - gtk_tree_view_set_model (window->priv->tree_view, - GTK_TREE_MODEL (window->priv->repository)); - GitgShell *loader = gitg_repository_get_loader (window->priv->repository); gitg_window_set_select_on_load (window, selection); From a40b4494609d34eb1aafb10a9c0bb5e79b63372c Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Tue, 29 Mar 2011 12:41:31 +0200 Subject: [PATCH 53/65] Fix repository dialog --- gitg/gitg-repository.ui | 1 + 1 file changed, 1 insertion(+) diff --git a/gitg/gitg-repository.ui b/gitg/gitg-repository.ui index f0b3b30f..44080a9e 100644 --- a/gitg/gitg-repository.ui +++ b/gitg/gitg-repository.ui @@ -196,6 +196,7 @@ 2 6 6 + False True From 7b58320106f496e3886983074479141c259d7b1d Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Sun, 12 Jun 2011 13:25:43 -0700 Subject: [PATCH 54/65] No longer use Gtk[HV]Box as it is deprecated --- gitg/gitg-branch-actions.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitg/gitg-branch-actions.c b/gitg/gitg-branch-actions.c index fd31b0f5..4edafb21 100644 --- a/gitg/gitg-branch-actions.c +++ b/gitg/gitg-branch-actions.c @@ -624,7 +624,7 @@ rename_dialog (GitgWindow *window, const gchar *oldname) gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK); - GtkWidget *box = gtk_hbox_new (FALSE, 6); + GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); GtkWidget *label = gtk_label_new (_("Name:")); GtkWidget *entry = gtk_entry_new (); From eb46912f870f027cccf1846c733731055de39ea7 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Mon, 18 Jul 2011 04:40:28 -0700 Subject: [PATCH 55/65] Fix spinner in repository dialog --- gitg/gitg-repository-dialog.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/gitg/gitg-repository-dialog.c b/gitg/gitg-repository-dialog.c index 263d8fcf..b84b46d9 100644 --- a/gitg/gitg-repository-dialog.c +++ b/gitg/gitg-repository-dialog.c @@ -302,9 +302,6 @@ on_fetch_begin_loading (GitgShell *shell, FetchInfo *info) { GtkTreeIter iter; GtkTreePath *path = gtk_tree_row_reference_get_path (info->reference); - GtkStyleContext *style_context; - GValue cycle_duration = {0,}; - GValue num_steps = {0,}; gtk_tree_model_get_iter (GTK_TREE_MODEL (info->dialog->priv->list_store_remotes), &iter, @@ -315,22 +312,14 @@ on_fetch_begin_loading (GitgShell *shell, FetchInfo *info) COLUMN_FETCH, TRUE, -1); - g_value_init (&cycle_duration, G_TYPE_UINT); - g_value_init (&num_steps, G_TYPE_UINT); - - style_context = gtk_widget_get_style_context (GTK_WIDGET (info->dialog->priv->tree_view_remotes)); - - gtk_style_context_get_style_property (style_context, "num-steps", &num_steps); - gtk_style_context_get_style_property (style_context, "cycle-duration", &cycle_duration); - - info->pulse_id = g_timeout_add (g_value_get_uint (&cycle_duration) / - g_value_get_uint (&num_steps), + /* We can't tell how often we are supposed to pulse so just pulse + * at the interval of the default engine. Yes this is annoying but, + * mclasen said to "blame the engine." + */ + info->pulse_id = g_timeout_add (750 / 12, (GSourceFunc)pulse_row, info); - g_value_unset (&cycle_duration); - g_value_unset (&num_steps); - gtk_tree_path_free (path); update_fetch (info->dialog); } From 33785e85e1a2615179fd6f98e0ce9b201e746325 Mon Sep 17 00:00:00 2001 From: Alexandre Rostovtsev Date: Thu, 21 Jul 2011 15:18:05 +0200 Subject: [PATCH 56/65] Use GLADE_CATALOG_DIR instead of GLADE_CATALOGDIR --- data/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/Makefile.am b/data/Makefile.am index 96b8537a..bbfff730 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -16,7 +16,7 @@ gitgstyles_DATA = gitgstyle.xml gsettings_SCHEMAS = org.gnome.gitg.gschema.xml if GLADE_CATALOG -catalogdir = $(GLADE_CATALOGDIR) +catalogdir = $(GLADE_CATALOG_DIR) dist_catalog_DATA = gitg-glade.xml endif From 5a210f6a1ede737e7fb090f34af520e58e879b4b Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 21 Jul 2011 15:34:30 +0200 Subject: [PATCH 57/65] Use ustar format for distcheck --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 1a408c6a..db5ca944 100644 --- a/configure.ac +++ b/configure.ac @@ -25,7 +25,7 @@ AC_SUBST(GITG_MINOR_VERSION, gitg_minor_version) AC_DEFINE(GITG_MICRO_VERSION, gitg_micro_version, [GitG micro version]) AC_SUBST(GITG_MICRO_VERSION, gitg_micro_version) -AM_INIT_AUTOMAKE([1.11 dist-bzip2 no-dist-gzip]) +AM_INIT_AUTOMAKE([1.11 tar-ustar dist-xz no-dist-gzip -Wno-portability]) AM_MAINTAINER_MODE([enable]) AM_SILENT_RULES([yes]) From 35561e062933c423d62cb956965bad1106543ed7 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 21 Jul 2011 15:39:53 +0200 Subject: [PATCH 58/65] Release 0.2.3 --- NEWS | 17 +++++++++++++++++ README | 6 +++--- configure.ac | 4 ++-- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index 44d235d7..2def5df3 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,20 @@ += gitg 0.2.3 = +Version 0.2.3 was released on 2011-07-21 + +== Features == + * Use ustar format for distcheck + +== Bug fixes == + * Use GLADE_CATALOG_DIR instead of GLADE_CATALOGDIR + * Fix spinner in repository dialog + * No longer use Gtk[HV]Box as it is deprecated + * Fix repository dialog + * Remove and reattach model while loading repository + * Fix ENABLE_DEBUG use in Makefile.am + * Fix --disable-debug + +== Features == + = gitg 0.2.2 = Version 0.2.2 was released on 2011-03-27 diff --git a/README b/README index df39a0f4..56417c61 100644 --- a/README +++ b/README @@ -3,7 +3,7 @@ gitg is a GitX clone for GNOME/gtk+. It aims at being a small, fast and convenient tool to visualize git history and actions that benefit from a graphical presentation. -The latest version of gitg is 0.2.2. +The latest version of gitg is 0.2.3. Website: http://trac.novowork.com/gitg Bugs: http://bugzilla.gnome.org/browse.cgi?product=gitg @@ -15,8 +15,8 @@ To install the latest version of gitg, make sure to download gitg-0.0.6.tar.bz2 from the download site. After downloading the following procedure installs gitg: - $ tar -xjf gitg-0.2.2.tar.bz2 - $ cd gitg-0.2.2 + $ tar Jxf gitg-0.2.3.tar.bz2 + $ cd gitg-0.2.3 $ ./configure $ make $ sudo make install diff --git a/configure.ac b/configure.ac index db5ca944..3edc641f 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ AC_PREREQ([2.64]) m4_define(gitg_major_version, 0) m4_define(gitg_minor_version, 2) -m4_define(gitg_micro_version, 2) +m4_define(gitg_micro_version, 3) m4_define(gitg_version, gitg_major_version.gitg_minor_version.gitg_micro_version) AC_INIT([gitg], @@ -56,7 +56,7 @@ AC_CHECK_LIB([m], [sinf]) GLIB_REQUIRED_VERSION=2.26 GTK_REQUIRED_VERSION=3.0.0 -GTKSOURCEVIEW_REQUIRED_VERSION=2.91.8 +GTKSOURCEVIEW_REQUIRED_VERSION=3.0.0 PKG_CHECK_MODULES(GITG, [ gtk+-3.0 >= $GTK_REQUIRED_VERSION From 3f8f77d2b13a5c5220bdade6a7388c8e22d1be21 Mon Sep 17 00:00:00 2001 From: Jasper Lievisse Adriaanse Date: Thu, 21 Jul 2011 15:48:34 +0200 Subject: [PATCH 59/65] Fix build on OpenBSD: - re-order headers so system headers are included before local headers - rename std{in,out} to g_std{in,out} to prevent symbol redefinitions https://bugzilla.gnome.org/show_bug.cgi?id=647629 --- libgitg/gitg-runner.c | 57 ++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/libgitg/gitg-runner.c b/libgitg/gitg-runner.c index 46883a93..78f0bc8f 100644 --- a/libgitg/gitg-runner.c +++ b/libgitg/gitg-runner.c @@ -20,28 +20,29 @@ * Boston, MA 02110-1301 USA */ -#include "gitg-runner.h" -#include "gitg-debug.h" - -#include "gitg-smart-charset-converter.h" - -#include #include #include +#include +#include #include #include #include #include +#include "gitg-runner.h" +#include "gitg-debug.h" + +#include "gitg-smart-charset-converter.h" + #define GITG_RUNNER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GITG_TYPE_RUNNER, GitgRunnerPrivate)) struct _GitgRunnerPrivate { GitgCommand *command; - GInputStream *stdout; - GOutputStream *stdin; + GInputStream *g_stdout; + GOutputStream *g_stdin; GCancellable *cancellable; gboolean cancelled; @@ -98,20 +99,20 @@ close_streams (GitgRunner *runner) g_cancellable_cancel (runner->priv->cancellable); } - if (runner->priv->stdin != NULL) + if (runner->priv->g_stdin != NULL) { - g_output_stream_close (runner->priv->stdin, NULL, NULL); - g_object_unref (runner->priv->stdin); + g_output_stream_close (runner->priv->g_stdin, NULL, NULL); + g_object_unref (runner->priv->g_stdin); - runner->priv->stdin = NULL; + runner->priv->g_stdin = NULL; } - if (runner->priv->stdout != NULL) + if (runner->priv->g_stdout != NULL) { - g_input_stream_close (runner->priv->stdout, NULL, NULL); - g_object_unref (runner->priv->stdout); + g_input_stream_close (runner->priv->g_stdout, NULL, NULL); + g_object_unref (runner->priv->g_stdout); - runner->priv->stdout = NULL; + runner->priv->g_stdout = NULL; } gitg_io_close (GITG_IO (runner)); @@ -376,7 +377,7 @@ gitg_runner_stream_close (GitgRunner *runner, } else { - g_input_stream_close (runner->priv->stdout, NULL, NULL); + g_input_stream_close (runner->priv->g_stdout, NULL, NULL); } } @@ -406,7 +407,7 @@ process_watch_cb (GPid pid, runner->priv->watch_id = 0; - if (runner->priv->stdout == NULL || g_input_stream_is_closed (runner->priv->stdout)) + if (runner->priv->g_stdout == NULL || g_input_stream_is_closed (runner->priv->g_stdout)) { runner_done (runner, NULL); } @@ -417,7 +418,7 @@ gitg_runner_run (GitgRunner *runner) { gboolean ret; gint stdinf; - gint stdoutf; + gint g_stdoutf; GFile *working_directory; gchar *wd_path = NULL; GInputStream *start_input; @@ -451,7 +452,7 @@ gitg_runner_run (GitgRunner *runner) NULL, &(runner->priv->pid), start_input ? &stdinf : NULL, - &stdoutf, + &g_stdoutf, NULL, &error); @@ -476,14 +477,14 @@ gitg_runner_run (GitgRunner *runner) runner->priv->cancellable = g_cancellable_new (); - runner->priv->stdin = + runner->priv->g_stdin = G_OUTPUT_STREAM (g_unix_output_stream_new (stdinf, TRUE)); data = async_data_new (runner); - /* Splice the supplied input to stdin of the process */ - g_output_stream_splice_async (runner->priv->stdin, + /* Splice the supplied input to g_stdin of the process */ + g_output_stream_splice_async (runner->priv->g_stdin, start_input, G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET, @@ -493,14 +494,14 @@ gitg_runner_run (GitgRunner *runner) data); } - output = G_INPUT_STREAM (g_unix_input_stream_new (stdoutf, + output = G_INPUT_STREAM (g_unix_input_stream_new (g_stdoutf, TRUE)); if (gitg_io_get_auto_utf8 (GITG_IO (runner))) { smart = gitg_smart_charset_converter_new (gitg_encoding_get_candidates ()); - runner->priv->stdout = g_converter_input_stream_new (output, + runner->priv->g_stdout = g_converter_input_stream_new (output, G_CONVERTER (smart)); g_object_unref (smart); @@ -508,7 +509,7 @@ gitg_runner_run (GitgRunner *runner) } else { - runner->priv->stdout = output; + runner->priv->g_stdout = output; } end_output = gitg_io_get_output (GITG_IO (runner)); @@ -526,7 +527,7 @@ gitg_runner_run (GitgRunner *runner) /* Splice output of the process into the provided stream */ g_output_stream_splice_async (end_output, - runner->priv->stdout, + runner->priv->g_stdout, G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET, G_PRIORITY_DEFAULT, @@ -541,7 +542,7 @@ gitg_runner_get_stream (GitgRunner *runner) { g_return_val_if_fail (GITG_IS_RUNNER (runner), NULL); - return runner->priv->stdout; + return runner->priv->g_stdout; } void From 0db87b7f2648b61d7834e135927e8b32de0e779f Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 21 Jul 2011 18:29:12 +0200 Subject: [PATCH 60/65] details panel: use a grid --- gitg/gitg-revision-details-panel.ui | 212 +++++++++++++++------------- 1 file changed, 114 insertions(+), 98 deletions(-) diff --git a/gitg/gitg-revision-details-panel.ui b/gitg/gitg-revision-details-panel.ui index 863d179b..ff0cd790 100644 --- a/gitg/gitg-revision-details-panel.ui +++ b/gitg/gitg-revision-details-panel.ui @@ -1,128 +1,96 @@ - + - - + True + False + vertical 3 - + True + False + 6 + 6 5 2 - 6 - 6 - False - - - True - 0 - True - True - - - 1 - 2 - 1 - 2 - - - - - True - 0 - True - True - - - 1 - 2 - GTK_FILL - - - - - True - 1 - Author: - - - 1 - 2 - GTK_FILL - GTK_FILL - - True + False 1 SHA: True - GTK_FILL - GTK_FILL + 0 + 0 + 1 + 1 + + + + + True + False + 1 + Author: + + + 0 + 1 + 1 + 1 True + False 1 Committer: + 0 2 - 3 - GTK_FILL - GTK_FILL - - - - - True - 0 - True - True - - - 1 - 2 - 2 - 3 - - - - - True - 0 - True - True - end - - - 1 - 2 - 3 - 4 + 1 + 1 True + False 1 Subject: + 0 3 - 4 - GTK_FILL - GTK_FILL + 1 + 1 + + + + + True + False + 1 + 0 + Parent: + + + 0 + 4 + 1 + 1 True + False + True 2 3 2 @@ -135,29 +103,76 @@ 1 - 2 4 - 5 + 1 + 1 - + True - 1 - 0 - Parent: + False + 0 + True + True + end - 4 - 5 - GTK_FILL - GTK_FILL + 1 + 3 + 1 + 1 + + + + + True + False + 0 + True + True + + + 1 + 2 + 1 + 1 + + + + + True + False + 0 + True + True + + + 1 + 1 + 1 + 1 + + + + + True + False + 0 + True + True + + + 1 + 0 + 1 + 1 False - 3 + True 0 @@ -165,21 +180,22 @@ True True - automatic - automatic + True etched-in True True False + word-char False False - word-char + False + True 1 From 381075db01e70f1a4e3613a199e97740bd485881 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 21 Jul 2011 20:07:42 +0200 Subject: [PATCH 61/65] details panel: show gravatar when changing the revision --- gitg/Makefile.am | 2 + gitg/gitg-avatar-cache.c | 371 ++++++++++++++++++++++++++++ gitg/gitg-avatar-cache.h | 73 ++++++ gitg/gitg-revision-details-panel.c | 60 +++++ gitg/gitg-revision-details-panel.ui | 331 +++++++++++++++---------- 5 files changed, 705 insertions(+), 132 deletions(-) create mode 100644 gitg/gitg-avatar-cache.c create mode 100644 gitg/gitg-avatar-cache.h diff --git a/gitg/Makefile.am b/gitg/Makefile.am index 50dc17fa..53589084 100644 --- a/gitg/Makefile.am +++ b/gitg/Makefile.am @@ -13,6 +13,7 @@ AM_CPPFLAGS = \ NOINST_H_FILES = \ gitg-activatable.h \ + gitg-avatar-cache.h \ gitg-branch-actions.h \ gitg-cell-renderer-path.h \ gitg-commit-view.h \ @@ -36,6 +37,7 @@ gitg_SOURCES = \ $(BUILT_SOURCES) \ gitg.c \ gitg-activatable.c \ + gitg-avatar-cache.c \ gitg-branch-actions.c \ gitg-cell-renderer-path.c \ gitg-commit-view.c \ diff --git a/gitg/gitg-avatar-cache.c b/gitg/gitg-avatar-cache.c new file mode 100644 index 00000000..e95c78ba --- /dev/null +++ b/gitg/gitg-avatar-cache.c @@ -0,0 +1,371 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2009 Mathias Hasselmann + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "config.h" +#include "gitg-avatar-cache.h" + +#include +#include +#include + +#define AVATAR_SIZE 80 + +typedef struct _GitgAvatarCacheLoader GitgAvatarCacheLoader; +struct _GitgAvatarCacheLoader +{ + gchar *uri; + GitgAvatarCache *cache; + GCancellable *cancellable; + gchar buffer[8192]; + GdkPixbufLoader *pixbuf_loader; + GdkPixbuf *pixbuf; + GSimpleAsyncResult *result; +}; + +struct _GitgAvatarCachePrivate +{ + GChecksum *checksum; + GHashTable *pixbuf_table; + GList *active_loaders; +}; + +G_DEFINE_TYPE (GitgAvatarCache, gitg_avatar_cache, G_TYPE_OBJECT) + +static void +avatar_cache_loader_finish (GitgAvatarCacheLoader *loader, + GError *error) +{ + if (loader->cache) + { + g_object_remove_weak_pointer (G_OBJECT (loader->cache), + (gpointer) &loader->cache); + } + + if (loader->cancellable) + { + g_cancellable_cancel (loader->cancellable); + g_object_unref (loader->cancellable); + } + + if (loader->pixbuf_loader) + { + gdk_pixbuf_loader_close (loader->pixbuf_loader, NULL); + g_object_unref (loader->pixbuf_loader); + } + + if (loader->pixbuf) + { + g_simple_async_result_set_op_res_gpointer (loader->result, + g_object_ref (loader->pixbuf), + g_object_unref); + } + else + { + g_simple_async_result_set_from_error (loader->result, error); + g_error_free (error); + } + + g_simple_async_result_complete_in_idle (loader->result); + g_object_unref (loader->result); + + g_slice_free (GitgAvatarCacheLoader, loader); +} + +static void +gitg_avatar_cache_init (GitgAvatarCache *cache) +{ + cache->priv = G_TYPE_INSTANCE_GET_PRIVATE (cache, + GITG_TYPE_AVATAR_CACHE, + GitgAvatarCachePrivate); + +} + +static void +avatar_cache_insert (GitgAvatarCache *cache, + const gchar *uri, + GdkPixbuf *pixbuf) +{ + GitgAvatarCachePrivate *priv = cache->priv; + + if (!priv->pixbuf_table) + { + priv->pixbuf_table = g_hash_table_new_full (g_str_hash, + g_str_equal, + g_free, + g_object_unref); + } + + g_hash_table_insert (priv->pixbuf_table, g_strdup (uri), + g_object_ref (pixbuf)); +} + +static void +avatar_cache_close_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GitgAvatarCacheLoader *loader = user_data; + GInputStream *stream = G_INPUT_STREAM (object); + GError *error = NULL; + + if (g_input_stream_close_finish (stream, result, &error) && + gdk_pixbuf_loader_close (loader->pixbuf_loader, &error)) + { + loader->pixbuf = gdk_pixbuf_loader_get_pixbuf (loader->pixbuf_loader); + avatar_cache_insert (loader->cache, loader->uri, loader->pixbuf); + g_object_unref (loader->pixbuf_loader); + loader->pixbuf_loader = NULL; + } + + if (error && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + g_warning ("%s: %s", G_STRFUNC, error->message); + + avatar_cache_loader_finish (loader, error); +} + +static void +avatar_cache_read_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GitgAvatarCacheLoader *loader = user_data; + GInputStream *stream = G_INPUT_STREAM (object); + GError *error = NULL; + gssize len; + + len = g_input_stream_read_finish (stream, result, &error); + + if (len > 0) + { + if (gdk_pixbuf_loader_write (loader->pixbuf_loader, (gpointer) + loader->buffer, len, &error)) + { + g_input_stream_read_async (stream, loader->buffer, + sizeof (loader->buffer), + G_PRIORITY_DEFAULT, + loader->cancellable, + avatar_cache_read_cb, + loader); + } + else + { + len = -2; + } + } + + if (0 >= len) + { + g_input_stream_close_async (stream, G_PRIORITY_DEFAULT, + loader->cancellable, + avatar_cache_close_cb, loader); + } + + if (error) + { + if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + g_warning ("%s: %s", G_STRFUNC, error->message); + + g_error_free (error); + } +} + +static void +avatar_cache_open_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) +{ + GitgAvatarCacheLoader *loader = user_data; + GError *error = NULL; + GFileInputStream *stream; + + stream = g_file_read_finish (G_FILE (object), result, &error); + + if (stream) + { + g_input_stream_read_async (G_INPUT_STREAM (stream), + loader->buffer, sizeof (loader->buffer), + G_PRIORITY_DEFAULT, loader->cancellable, + avatar_cache_read_cb, loader); + } + else + { + if (error && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + g_warning ("%s: %s", G_STRFUNC, error->message); + + avatar_cache_loader_finish (loader, error); + } +} + +static void +avatar_cache_finalize (GObject *object) +{ + GitgAvatarCachePrivate *priv = GITG_AVATAR_CACHE (object)->priv; + GitgAvatarCacheLoader *loader; + GList *l; + + if (priv->pixbuf_table) + { + g_hash_table_unref (priv->pixbuf_table); + } + + if (priv->checksum) + { + g_checksum_free (priv->checksum); + } + + for (l = priv->active_loaders; l; l = g_list_delete_link (l, l)) + { + loader = priv->active_loaders->data; + g_cancellable_cancel (loader->cancellable); + } + + G_OBJECT_CLASS (gitg_avatar_cache_parent_class)->finalize (object); +} + +static void +gitg_avatar_cache_class_init (GitgAvatarCacheClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + + object_class->finalize = avatar_cache_finalize; + + g_type_class_add_private (class, sizeof (GitgAvatarCachePrivate)); +} + +GitgAvatarCache * +gitg_avatar_cache_new (void) +{ + return g_object_new (GITG_TYPE_AVATAR_CACHE, NULL); +} + +void +gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, + const gchar *uri, + gint io_priority, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +{ + GitgAvatarCachePrivate *priv; + GdkPixbuf *pixbuf = NULL; + GSimpleAsyncResult *result; + GitgAvatarCacheLoader *loader; + GFile *file; + + g_return_if_fail (GITG_IS_AVATAR_CACHE (cache)); + g_return_if_fail (NULL != callback); + g_return_if_fail (NULL != uri); + + priv = cache->priv; + + result = g_simple_async_result_new (G_OBJECT (cache), callback, user_data, + gitg_avatar_cache_load_uri_async); + + if (priv->pixbuf_table) + pixbuf = g_hash_table_lookup (priv->pixbuf_table, uri); + + if (pixbuf) + { + g_simple_async_result_set_op_res_gpointer (result, + g_object_ref (pixbuf), + g_object_unref); + g_simple_async_result_complete_in_idle (result); + } + else + { + if (cancellable) + { + g_object_ref (cancellable); + } + else + { + cancellable = g_cancellable_new (); + } + + loader = g_slice_new0 (GitgAvatarCacheLoader); + loader->pixbuf_loader = gdk_pixbuf_loader_new (); + loader->result = g_object_ref (result); + loader->cancellable = cancellable; + loader->uri = g_strdup (uri); + loader->cache = cache; + + g_object_add_weak_pointer (G_OBJECT (loader->cache), + (gpointer) &loader->cache); + + file = g_file_new_for_uri (uri); + + g_file_read_async (file, G_PRIORITY_DEFAULT, loader->cancellable, + avatar_cache_open_cb, loader); + + g_object_unref (file); + } + + g_object_unref (result); +} + +GdkPixbuf * +gitg_avatar_cache_load_finish (GitgAvatarCache *cache, + GAsyncResult *result, + GError **error) +{ + GSimpleAsyncResult *simple; + gpointer source_tag; + + g_return_val_if_fail (GITG_IS_AVATAR_CACHE (cache), NULL); + g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL); + + simple = G_SIMPLE_ASYNC_RESULT (result); + source_tag = g_simple_async_result_get_source_tag (simple); + + g_return_val_if_fail (source_tag == gitg_avatar_cache_load_uri_async, NULL); + + if (g_simple_async_result_propagate_error (simple, error)) + return NULL; + + return g_simple_async_result_get_op_res_gpointer (simple); +} + +gchar * +gitg_avatar_cache_get_gravatar_uri (GitgAvatarCache *cache, + const gchar *gravatar_id) +{ + GitgAvatarCachePrivate *priv; + + g_return_val_if_fail (GITG_IS_AVATAR_CACHE (cache), NULL); + g_return_val_if_fail (NULL != gravatar_id, NULL); + + priv = cache->priv; + + if (priv->checksum) + { + g_checksum_reset (priv->checksum); + } + else + { + priv->checksum = g_checksum_new (G_CHECKSUM_MD5); + } + + g_checksum_update (priv->checksum, (gpointer) gravatar_id, + strlen (gravatar_id)); + + return g_strdup_printf ("http://www.gravatar.com/avatar/%s?s=%d", + g_checksum_get_string (priv->checksum), + AVATAR_SIZE); +} diff --git a/gitg/gitg-avatar-cache.h b/gitg/gitg-avatar-cache.h new file mode 100644 index 00000000..dca9a347 --- /dev/null +++ b/gitg/gitg-avatar-cache.h @@ -0,0 +1,73 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Copyright (C) 2009 Mathias Hasselmann + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GITG_AVATAR_CACHE_H__ +#define __GITG_AVATAR_CACHE_H__ + +#include +#include + +G_BEGIN_DECLS + +#define GITG_TYPE_AVATAR_CACHE (gitg_avatar_cache_get_type ()) +#define GITG_AVATAR_CACHE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GITG_TYPE_AVATAR_CACHE, GitgAvatarCache)) +#define GITG_AVATAR_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GITG_TYPE_AVATAR_CACHE, GitgAvatarCacheClass)) +#define GITG_IS_AVATAR_CACHE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GITG_TYPE_AVATAR_CACHE)) +#define GITG_IS_AVATAR_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GITG_TYPE_AVATAR_CACHE)) +#define GITG_AVATAR_CACHE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GITG_TYPE_AVATAR_CACHE, GitgAvatarCacheClass)) + +typedef struct _GitgAvatarCache GitgAvatarCache; +typedef struct _GitgAvatarCachePrivate GitgAvatarCachePrivate; +typedef struct _GitgAvatarCacheClass GitgAvatarCacheClass; + +struct _GitgAvatarCache +{ + GObject parent_instance; + + GitgAvatarCachePrivate *priv; +}; + +struct _GitgAvatarCacheClass +{ + GObjectClass parent_class; +}; + +GType gitg_avatar_cache_get_type (void) G_GNUC_CONST; + +GitgAvatarCache *gitg_avatar_cache_new (void); + +void gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, + const gchar *uri, + gint io_priority, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data); + +GdkPixbuf *gitg_avatar_cache_load_finish (GitgAvatarCache *cache, + GAsyncResult *result, + GError **error); + +gchar *gitg_avatar_cache_get_gravatar_uri (GitgAvatarCache *cache, + const gchar *gravatar_id); + +G_END_DECLS + +#endif /* __GITG_AVATAR_CACHE_H__ */ + diff --git a/gitg/gitg-revision-details-panel.c b/gitg/gitg-revision-details-panel.c index 67b52da4..5d0f6b60 100644 --- a/gitg/gitg-revision-details-panel.c +++ b/gitg/gitg-revision-details-panel.c @@ -26,6 +26,7 @@ #include "gitg-revision-panel.h" #include "gitg-stat-view.h" #include "gitg-uri.h" +#include "gitg-avatar-cache.h" #include #include @@ -46,6 +47,7 @@ struct _GitgRevisionDetailsPanelPrivate GtkLabel *committer; GtkLabel *subject; GtkTable *parents; + GtkImage *avatar; GtkWidget *panel_widget; GtkTextView *text_view; @@ -60,6 +62,8 @@ struct _GitgRevisionDetailsPanelPrivate GSList *stats; GitgWindow *window; + + GitgAvatarCache *cache; }; static void gitg_revision_panel_iface_init (GitgRevisionPanelInterface *iface); @@ -125,6 +129,7 @@ initialize_ui (GitgRevisionDetailsPanel *panel) priv->subject = GTK_LABEL (gtk_builder_get_object (priv->builder, "label_subject")); priv->parents = GTK_TABLE (gtk_builder_get_object (priv->builder, "table_parents")); priv->text_view = GTK_TEXT_VIEW (gtk_builder_get_object (priv->builder, "text_view_details")); + priv->avatar = GTK_IMAGE (gtk_builder_get_object (priv->builder, "image_avatar")); gchar const *lbls[] = { "label_subject_lbl", @@ -211,6 +216,12 @@ gitg_revision_details_panel_dispose (GObject *object) panel->priv->shell = NULL; } + if (panel->priv->cache) + { + g_object_unref (panel->priv->cache); + panel->priv->cache = NULL; + } + G_OBJECT_CLASS (gitg_revision_details_panel_parent_class)->dispose (object); } static void @@ -548,6 +559,8 @@ gitg_revision_details_panel_init (GitgRevisionDetailsPanel *self) "update", G_CALLBACK (on_shell_update), self); + + self->priv->cache = gitg_avatar_cache_new (); } #define HASH_KEY "GitgRevisionDetailsPanelHashKey" @@ -725,6 +738,50 @@ update_details (GitgRevisionDetailsPanel *panel) g_free (sha1); } +static void +avatar_ready (GObject *source_object, + GAsyncResult *res, + GitgRevisionDetailsPanel *panel) +{ + GdkPixbuf *pixbuf; + GError *error = NULL; + + pixbuf = gitg_avatar_cache_load_finish (panel->priv->cache, + res, + &error); + + if (error == NULL) + { + gtk_image_set_from_pixbuf (panel->priv->avatar, + pixbuf); + gtk_widget_show (GTK_WIDGET (panel->priv->avatar)); + } +} + +static void +set_avatar (GitgRevisionDetailsPanel *panel, + const gchar *email) +{ + if (email == NULL || *email == '\0') + { + gtk_widget_hide (GTK_WIDGET (panel->priv->avatar)); + } + else + { + gchar *uri; + + uri = gitg_avatar_cache_get_gravatar_uri (panel->priv->cache, + email); + gitg_avatar_cache_load_uri_async (panel->priv->cache, + uri, + G_PRIORITY_DEFAULT, + NULL, + (GAsyncReadyCallback)avatar_ready, + panel); + g_free (uri); + } +} + static void reload (GitgRevisionDetailsPanel *panel) { @@ -775,6 +832,8 @@ reload (GitgRevisionDetailsPanel *panel) gtk_clipboard_set_text (cb, sha, -1); g_free (sha); + + set_avatar (panel, gitg_revision_get_author_email (panel->priv->revision)); } else { @@ -782,6 +841,7 @@ reload (GitgRevisionDetailsPanel *panel) gtk_label_set_text (panel->priv->committer, ""); gtk_label_set_text (panel->priv->subject, ""); gtk_label_set_text (panel->priv->sha, ""); + set_avatar (panel, NULL); } // Update parents diff --git a/gitg/gitg-revision-details-panel.ui b/gitg/gitg-revision-details-panel.ui index ff0cd790..85a988ef 100644 --- a/gitg/gitg-revision-details-panel.ui +++ b/gitg/gitg-revision-details-panel.ui @@ -10,90 +10,171 @@ True False - 6 - 6 - 5 - 2 - - True - False - 1 - SHA: - True - - - 0 - 0 - 1 - 1 - - - - - True - False - 1 - Author: - - - 0 - 1 - 1 - 1 - - - - - True - False - 1 - Committer: - - - 0 - 2 - 1 - 1 - - - - - True - False - 1 - Subject: - - - 0 - 3 - 1 - 1 - - - - - True - False - 1 - 0 - Parent: - - - 0 - 4 - 1 - 1 - - - - + True False True - 2 - 3 - 2 + 6 + 6 + + + True + False + 1 + SHA: + True + + + 0 + 0 + 1 + 1 + + + + + True + False + 1 + Author: + + + 0 + 1 + 1 + 1 + + + + + True + False + 1 + Committer: + + + 0 + 2 + 1 + 1 + + + + + True + False + 1 + Subject: + + + 0 + 3 + 1 + 1 + + + + + True + False + 1 + 0 + Parent: + + + 0 + 4 + 1 + 1 + + + + + True + False + True + 2 + 3 + 2 + + + + + + + + + 1 + 4 + 1 + 1 + + + + + True + False + 0 + True + True + end + + + 1 + 3 + 1 + 1 + + + + + True + False + 0 + True + True + + + 1 + 2 + 1 + 1 + + + + + True + False + 0 + True + True + + + 1 + 1 + 1 + 1 + + + + + True + False + 0 + True + True + + + 1 + 0 + 1 + 1 + + + + + @@ -102,65 +183,30 @@ - 1 - 4 + 0 + 0 1 1 - + True False - 0 - True - True - end - - - 1 - 3 - 1 - 1 - - - - - True - False - 0 - True - True - - - 1 - 2 - 1 - 1 - - - - - True - False - 0 - True - True - - - 1 - 1 - 1 - 1 - - - - - True - False - 0 - True - True + vertical + 6 + + + True + False + gtk-missing-image + + + False + True + 0 + + 1 @@ -169,6 +215,27 @@ 1 + + + + + + + + + + + + + + + + + + + + + False From 169968d92df8e5f6c4faf4a3229273b0e8cbc5c0 Mon Sep 17 00:00:00 2001 From: Ignacio Casal Quinteiro Date: Thu, 21 Jul 2011 23:48:53 +0200 Subject: [PATCH 62/65] files panel: set the buffer in the ui file --- gitg/gitg-revision-files-panel.c | 3 --- gitg/gitg-revision-files-panel.ui | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/gitg/gitg-revision-files-panel.c b/gitg/gitg-revision-files-panel.c index 3caa690e..8cee3fe0 100644 --- a/gitg/gitg-revision-files-panel.c +++ b/gitg/gitg-revision-files-panel.c @@ -525,9 +525,6 @@ gitg_revision_files_view_parser_finished (GtkBuildable *buildable, files_view->priv->contents = GTK_SOURCE_VIEW (gtk_builder_get_object (builder, "revision_files_contents")); - gtk_text_view_set_buffer (GTK_TEXT_VIEW(files_view->priv->contents), - GTK_TEXT_BUFFER(gtk_source_buffer_new (NULL))); - gitg_utils_set_monospace_font (GTK_WIDGET(files_view->priv->contents)); gtk_tree_view_set_model (files_view->priv->tree_view, GTK_TREE_MODEL(files_view->priv->store)); diff --git a/gitg/gitg-revision-files-panel.ui b/gitg/gitg-revision-files-panel.ui index 4d490c82..acdbc8af 100644 --- a/gitg/gitg-revision-files-panel.ui +++ b/gitg/gitg-revision-files-panel.ui @@ -1,5 +1,6 @@ + True True @@ -50,6 +51,7 @@ etched-in + source_buffer False True From 8587622b7263b42b1f4fa5fa96a391a367d52870 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Thu, 21 Jul 2011 14:48:03 -0700 Subject: [PATCH 63/65] Fix alignment of params and variabls in the avatar cache --- gitg/gitg-avatar-cache.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/gitg/gitg-avatar-cache.c b/gitg/gitg-avatar-cache.c index e95c78ba..77c7ee3c 100644 --- a/gitg/gitg-avatar-cache.c +++ b/gitg/gitg-avatar-cache.c @@ -31,7 +31,7 @@ typedef struct _GitgAvatarCacheLoader GitgAvatarCacheLoader; struct _GitgAvatarCacheLoader { gchar *uri; - GitgAvatarCache *cache; + GitgAvatarCache *cache; GCancellable *cancellable; gchar buffer[8192]; GdkPixbufLoader *pixbuf_loader; @@ -99,8 +99,8 @@ gitg_avatar_cache_init (GitgAvatarCache *cache) static void avatar_cache_insert (GitgAvatarCache *cache, - const gchar *uri, - GdkPixbuf *pixbuf) + const gchar *uri, + GdkPixbuf *pixbuf) { GitgAvatarCachePrivate *priv = cache->priv; @@ -122,8 +122,8 @@ avatar_cache_close_cb (GObject *object, gpointer user_data) { GitgAvatarCacheLoader *loader = user_data; - GInputStream *stream = G_INPUT_STREAM (object); - GError *error = NULL; + GInputStream *stream = G_INPUT_STREAM (object); + GError *error = NULL; if (g_input_stream_close_finish (stream, result, &error) && gdk_pixbuf_loader_close (loader->pixbuf_loader, &error)) @@ -146,9 +146,9 @@ avatar_cache_read_cb (GObject *object, gpointer user_data) { GitgAvatarCacheLoader *loader = user_data; - GInputStream *stream = G_INPUT_STREAM (object); - GError *error = NULL; - gssize len; + GInputStream *stream = G_INPUT_STREAM (object); + GError *error = NULL; + gssize len; len = g_input_stream_read_finish (stream, result, &error); @@ -192,8 +192,8 @@ avatar_cache_open_cb (GObject *object, gpointer user_data) { GitgAvatarCacheLoader *loader = user_data; - GError *error = NULL; - GFileInputStream *stream; + GError *error = NULL; + GFileInputStream *stream; stream = g_file_read_finish (G_FILE (object), result, &error); @@ -217,8 +217,8 @@ static void avatar_cache_finalize (GObject *object) { GitgAvatarCachePrivate *priv = GITG_AVATAR_CACHE (object)->priv; - GitgAvatarCacheLoader *loader; - GList *l; + GitgAvatarCacheLoader *loader; + GList *l; if (priv->pixbuf_table) { @@ -256,7 +256,7 @@ gitg_avatar_cache_new (void) } void -gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, +gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, const gchar *uri, gint io_priority, GCancellable *cancellable, @@ -264,10 +264,10 @@ gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, gpointer user_data) { GitgAvatarCachePrivate *priv; - GdkPixbuf *pixbuf = NULL; - GSimpleAsyncResult *result; + GdkPixbuf *pixbuf = NULL; + GSimpleAsyncResult *result; GitgAvatarCacheLoader *loader; - GFile *file; + GFile *file; g_return_if_fail (GITG_IS_AVATAR_CACHE (cache)); g_return_if_fail (NULL != callback); @@ -322,8 +322,8 @@ gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, GdkPixbuf * gitg_avatar_cache_load_finish (GitgAvatarCache *cache, - GAsyncResult *result, - GError **error) + GAsyncResult *result, + GError **error) { GSimpleAsyncResult *simple; gpointer source_tag; @@ -343,8 +343,8 @@ gitg_avatar_cache_load_finish (GitgAvatarCache *cache, } gchar * -gitg_avatar_cache_get_gravatar_uri (GitgAvatarCache *cache, - const gchar *gravatar_id) +gitg_avatar_cache_get_gravatar_uri (GitgAvatarCache *cache, + const gchar *gravatar_id) { GitgAvatarCachePrivate *priv; From a8ad9232678a98a39d1ed7b85e43ab062d99dbe0 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Fri, 22 Jul 2011 05:15:57 -0700 Subject: [PATCH 64/65] Do not show an avatar if it does not exist --- gitg/gitg-avatar-cache.c | 61 ++++++++++++++++++++++++------ gitg/gitg-revision-details-panel.c | 7 ++-- 2 files changed, 54 insertions(+), 14 deletions(-) diff --git a/gitg/gitg-avatar-cache.c b/gitg/gitg-avatar-cache.c index 77c7ee3c..1a6584d2 100644 --- a/gitg/gitg-avatar-cache.c +++ b/gitg/gitg-avatar-cache.c @@ -97,6 +97,15 @@ gitg_avatar_cache_init (GitgAvatarCache *cache) } +static void +cached_pixbuf_unref0 (gpointer pixbuf) +{ + if (pixbuf != NULL) + { + g_object_unref (pixbuf); + } +} + static void avatar_cache_insert (GitgAvatarCache *cache, const gchar *uri, @@ -109,11 +118,15 @@ avatar_cache_insert (GitgAvatarCache *cache, priv->pixbuf_table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, - g_object_unref); + cached_pixbuf_unref0); } - g_hash_table_insert (priv->pixbuf_table, g_strdup (uri), - g_object_ref (pixbuf)); + if (pixbuf != NULL) + { + g_object_ref (pixbuf); + } + + g_hash_table_insert (priv->pixbuf_table, g_strdup (uri), pixbuf); } static void @@ -206,8 +219,19 @@ avatar_cache_open_cb (GObject *object, } else { - if (error && !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + /* At the moment G_IO_ERROR_NOT_FOUND is not being returned + * and instead an error code of 404 is. This is HTTP's + * File Not Found error. + */ + if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND) || + (error != NULL && error->code == 404)) + { + avatar_cache_insert (loader->cache, loader->uri, NULL); + } + else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) + { g_warning ("%s: %s", G_STRFUNC, error->message); + } avatar_cache_loader_finish (loader, error); } @@ -264,6 +288,7 @@ gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, gpointer user_data) { GitgAvatarCachePrivate *priv; + gboolean found = FALSE; GdkPixbuf *pixbuf = NULL; GSimpleAsyncResult *result; GitgAvatarCacheLoader *loader; @@ -279,13 +304,26 @@ gitg_avatar_cache_load_uri_async (GitgAvatarCache *cache, gitg_avatar_cache_load_uri_async); if (priv->pixbuf_table) - pixbuf = g_hash_table_lookup (priv->pixbuf_table, uri); - - if (pixbuf) { - g_simple_async_result_set_op_res_gpointer (result, - g_object_ref (pixbuf), - g_object_unref); + found = g_hash_table_lookup_extended (priv->pixbuf_table, uri, + NULL, (gpointer *) &pixbuf); + } + + if (found) + { + if (pixbuf == NULL) + { + g_simple_async_result_set_error (result, G_IO_ERROR, + G_IO_ERROR_NOT_FOUND, + "Not Found"); + } + else + { + g_simple_async_result_set_op_res_gpointer (result, + g_object_ref (pixbuf), + g_object_unref); + } + g_simple_async_result_complete_in_idle (result); } else @@ -365,7 +403,8 @@ gitg_avatar_cache_get_gravatar_uri (GitgAvatarCache *cache, g_checksum_update (priv->checksum, (gpointer) gravatar_id, strlen (gravatar_id)); - return g_strdup_printf ("http://www.gravatar.com/avatar/%s?s=%d", + /* d=404 will return a File Not Found if the avatar does not exist */ + return g_strdup_printf ("http://www.gravatar.com/avatar/%s?d=404&s=%d", g_checksum_get_string (priv->checksum), AVATAR_SIZE); } diff --git a/gitg/gitg-revision-details-panel.c b/gitg/gitg-revision-details-panel.c index 5d0f6b60..a1d315d1 100644 --- a/gitg/gitg-revision-details-panel.c +++ b/gitg/gitg-revision-details-panel.c @@ -750,11 +750,12 @@ avatar_ready (GObject *source_object, res, &error); + gtk_widget_set_visible (GTK_WIDGET (panel->priv->avatar), + error == NULL); + if (error == NULL) { - gtk_image_set_from_pixbuf (panel->priv->avatar, - pixbuf); - gtk_widget_show (GTK_WIDGET (panel->priv->avatar)); + gtk_image_set_from_pixbuf (panel->priv->avatar, pixbuf); } } From 1687b436c21848353acab622fbcef1a18b6b2362 Mon Sep 17 00:00:00 2001 From: Garrett Regier Date: Fri, 22 Jul 2011 05:17:44 -0700 Subject: [PATCH 65/65] Lowercase the email when getting the gravatar uri See: http://en.gravatar.com/site/implement/hash/ --- gitg/gitg-avatar-cache.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gitg/gitg-avatar-cache.c b/gitg/gitg-avatar-cache.c index 1a6584d2..93170525 100644 --- a/gitg/gitg-avatar-cache.c +++ b/gitg/gitg-avatar-cache.c @@ -385,6 +385,8 @@ gitg_avatar_cache_get_gravatar_uri (GitgAvatarCache *cache, const gchar *gravatar_id) { GitgAvatarCachePrivate *priv; + gssize len; + gchar *lowercase_id; g_return_val_if_fail (GITG_IS_AVATAR_CACHE (cache), NULL); g_return_val_if_fail (NULL != gravatar_id, NULL); @@ -400,8 +402,12 @@ gitg_avatar_cache_get_gravatar_uri (GitgAvatarCache *cache, priv->checksum = g_checksum_new (G_CHECKSUM_MD5); } - g_checksum_update (priv->checksum, (gpointer) gravatar_id, - strlen (gravatar_id)); + len = strlen (gravatar_id); + lowercase_id = g_ascii_strdown (gravatar_id, len); + + g_checksum_update (priv->checksum, (gpointer) lowercase_id, len); + + g_free (lowercase_id); /* d=404 will return a File Not Found if the avatar does not exist */ return g_strdup_printf ("http://www.gravatar.com/avatar/%s?d=404&s=%d",