mirror of
https://gitlab.gnome.org/GNOME/gitg
synced 2024-10-02 14:13:48 +00:00
Merge branch 'master' of ssh://jessevdk@git.gnome.org/git/gitg
This commit is contained in:
commit
34bfbcc3b6
|
@ -49,6 +49,7 @@ PKG_CHECK_MODULES(PACKAGE, [
|
|||
gtksourceview-2.0
|
||||
gio-2.0
|
||||
gmodule-2.0
|
||||
gconf-2.0
|
||||
])
|
||||
|
||||
AC_SUBST(PACKAGE_CFLAGS)
|
||||
|
|
|
@ -695,9 +695,7 @@ gitg_commit_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder)
|
|||
g_object_unref(pixbuf);
|
||||
}
|
||||
|
||||
PangoFontDescription *fd = pango_font_description_from_string("Monospace 10");
|
||||
gtk_widget_modify_font(GTK_WIDGET(self->priv->changes_view), fd);
|
||||
pango_font_description_free(fd);
|
||||
gitg_utils_set_monospace_font(GTK_WIDGET(self->priv->changes_view));
|
||||
|
||||
GtkTextBuffer *buffer = initialize_buffer(self);
|
||||
gtk_text_view_set_buffer(GTK_TEXT_VIEW(self->priv->changes_view), buffer);
|
||||
|
|
|
@ -108,8 +108,13 @@ gitg_commit_set_property(GObject *object, guint prop_id, const GValue *value, GP
|
|||
switch (prop_id)
|
||||
{
|
||||
case PROP_REPOSITORY:
|
||||
self->priv->repository = g_value_get_object(value);
|
||||
{
|
||||
if (self->priv->repository)
|
||||
g_object_unref(self->priv->repository);
|
||||
|
||||
self->priv->repository = g_value_dup_object(value);
|
||||
g_signal_connect_swapped(self->priv->repository, "load", G_CALLBACK(gitg_commit_refresh), self);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
|
|
|
@ -360,12 +360,10 @@ expand_lane(GitgLanes *lanes, CollapsedLane *lane)
|
|||
|
||||
if (cnt == INACTIVE_COLLAPSE)
|
||||
break;
|
||||
|
||||
next = ensure_correct_index(revision, index);
|
||||
|
||||
|
||||
/* insert new lane at the index */
|
||||
GitgLane *copy = gitg_lane_copy(ln);
|
||||
GSList *lns = gitg_revision_get_lanes(revision);
|
||||
GSList *lns = gitg_revision_get_lanes(revision);
|
||||
|
||||
if (!item->next || cnt + 1 == INACTIVE_COLLAPSE)
|
||||
{
|
||||
|
@ -377,6 +375,7 @@ expand_lane(GitgLanes *lanes, CollapsedLane *lane)
|
|||
}
|
||||
else
|
||||
{
|
||||
next = ensure_correct_index(GITG_REVISION(item->next->data), index);
|
||||
copy->from = g_slist_prepend(NULL, GINT_TO_POINTER((gint)next));
|
||||
|
||||
/* update merge indices */
|
||||
|
|
|
@ -307,11 +307,8 @@ do_clear(GitgRepository *repository, gboolean emit)
|
|||
repository->priv->allocated = 0;
|
||||
|
||||
/* clear hash tables */
|
||||
g_hash_table_ref(repository->priv->hashtable);
|
||||
g_hash_table_ref(repository->priv->refs);
|
||||
|
||||
g_hash_table_destroy(repository->priv->hashtable);
|
||||
g_hash_table_destroy(repository->priv->refs);
|
||||
g_hash_table_remove_all(repository->priv->hashtable);
|
||||
g_hash_table_remove_all(repository->priv->refs);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -688,6 +685,19 @@ gitg_repository_clear(GitgRepository *repository)
|
|||
do_clear(repository, TRUE);
|
||||
}
|
||||
|
||||
GitgRevision *
|
||||
gitg_repository_lookup(GitgRepository *store, gchar const *hash)
|
||||
{
|
||||
g_return_val_if_fail(GITG_IS_REPOSITORY(store), NULL);
|
||||
|
||||
gpointer result = g_hash_table_lookup(store->priv->hashtable, hash);
|
||||
|
||||
if (!result)
|
||||
return NULL;
|
||||
|
||||
return store->priv->storage[GPOINTER_TO_UINT(result)];
|
||||
}
|
||||
|
||||
gboolean
|
||||
gitg_repository_find_by_hash(GitgRepository *store, gchar const *hash, GtkTreeIter *iter)
|
||||
{
|
||||
|
|
|
@ -52,6 +52,7 @@ void gitg_repository_clear(GitgRepository *repository);
|
|||
|
||||
gboolean gitg_repository_find_by_hash(GitgRepository *self, gchar const *hash, GtkTreeIter *iter);
|
||||
gboolean gitg_repository_find(GitgRepository *store, GitgRevision *revision, GtkTreeIter *iter);
|
||||
GitgRevision *gitg_repository_lookup(GitgRepository *store, gchar const *hash);
|
||||
|
||||
GSList *gitg_repository_get_refs(GitgRepository *repository);
|
||||
GSList *gitg_repository_get_refs_for_hash(GitgRepository *repository, gchar const *hash);
|
||||
|
|
|
@ -355,10 +355,7 @@ gitg_revision_tree_view_parser_finished(GtkBuildable *buildable, GtkBuilder *bui
|
|||
|
||||
gtk_text_view_set_buffer(GTK_TEXT_VIEW(tree_view->priv->contents), GTK_TEXT_BUFFER(gtk_source_buffer_new(NULL)));
|
||||
|
||||
PangoFontDescription *fd = pango_font_description_from_string("Monospace 10");
|
||||
gtk_widget_modify_font(GTK_WIDGET(tree_view->priv->contents), fd);
|
||||
pango_font_description_free(fd);
|
||||
|
||||
gitg_utils_set_monospace_font(GTK_WIDGET(tree_view->priv->contents));
|
||||
gtk_tree_view_set_model(tree_view->priv->tree_view, GTK_TREE_MODEL(tree_view->priv->store));
|
||||
|
||||
GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view->priv->tree_view);
|
||||
|
|
|
@ -4,11 +4,19 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "gitg-revision-view.h"
|
||||
#include "gitg-revision.h"
|
||||
#include "gitg-runner.h"
|
||||
#include "gitg-utils.h"
|
||||
|
||||
#define GITG_REVISION_VIEW_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE((object), GITG_TYPE_REVISION_VIEW, GitgRevisionViewPrivate))
|
||||
|
||||
/* Properties */
|
||||
enum
|
||||
{
|
||||
PROP_0,
|
||||
PROP_REPOSITORY
|
||||
};
|
||||
|
||||
/* Signals */
|
||||
enum
|
||||
{
|
||||
|
@ -24,10 +32,12 @@ struct _GitgRevisionViewPrivate
|
|||
GtkLabel *author;
|
||||
GtkLabel *date;
|
||||
GtkLabel *subject;
|
||||
GtkVBox *parents;
|
||||
GtkTable *parents;
|
||||
GtkSourceView *diff;
|
||||
|
||||
GitgRunner *diff_runner;
|
||||
|
||||
GitgRepository *repository;
|
||||
};
|
||||
|
||||
static void gitg_revision_view_buildable_iface_init(GtkBuildableIface *iface);
|
||||
|
@ -61,7 +71,7 @@ gitg_revision_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder)
|
|||
rvv->priv->author = GTK_LABEL(gtk_builder_get_object(builder, "label_author"));
|
||||
rvv->priv->date = GTK_LABEL(gtk_builder_get_object(builder, "label_date"));
|
||||
rvv->priv->subject = GTK_LABEL(gtk_builder_get_object(builder, "label_subject"));
|
||||
rvv->priv->parents = GTK_VBOX(gtk_builder_get_object(builder, "vbox_parents"));
|
||||
rvv->priv->parents = GTK_TABLE(gtk_builder_get_object(builder, "table_parents"));
|
||||
rvv->priv->diff = GTK_SOURCE_VIEW(gtk_builder_get_object(builder, "revision_diff"));
|
||||
|
||||
GtkSourceLanguageManager *manager = gtk_source_language_manager_get_default();
|
||||
|
@ -73,10 +83,7 @@ gitg_revision_view_parser_finished(GtkBuildable *buildable, GtkBuilder *builder)
|
|||
GtkSourceStyleScheme *scheme = gtk_source_style_scheme_manager_get_scheme(schememanager, "gitg");
|
||||
gtk_source_buffer_set_style_scheme(buffer, scheme);
|
||||
|
||||
PangoFontDescription *fd = pango_font_description_from_string("Monospace 10");
|
||||
gtk_widget_modify_font(GTK_WIDGET(rvv->priv->diff), fd);
|
||||
pango_font_description_free(fd);
|
||||
|
||||
gitg_utils_set_monospace_font(GTK_WIDGET(rvv->priv->diff));
|
||||
gtk_text_view_set_buffer(GTK_TEXT_VIEW(rvv->priv->diff), GTK_TEXT_BUFFER(buffer));
|
||||
|
||||
gchar const *lbls[] = {
|
||||
|
@ -107,17 +114,67 @@ gitg_revision_view_finalize(GObject *object)
|
|||
|
||||
gitg_runner_cancel(self->priv->diff_runner);
|
||||
g_object_unref(self->priv->diff_runner);
|
||||
|
||||
g_object_unref(self->priv->repository);
|
||||
|
||||
G_OBJECT_CLASS(gitg_revision_view_parent_class)->finalize(object);
|
||||
}
|
||||
|
||||
static void
|
||||
gitg_revision_view_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
GitgRevisionView *self = GITG_REVISION_VIEW(object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_REPOSITORY:
|
||||
g_value_set_object(value, self->priv->repository);
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gitg_revision_view_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
|
||||
{
|
||||
GitgRevisionView *self = GITG_REVISION_VIEW(object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_REPOSITORY:
|
||||
{
|
||||
if (self->priv->repository)
|
||||
g_object_unref(self->priv->repository);
|
||||
|
||||
self->priv->repository = g_value_dup_object(value);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gitg_revision_view_class_init(GitgRevisionViewClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS(klass);
|
||||
|
||||
object_class->finalize = gitg_revision_view_finalize;
|
||||
|
||||
|
||||
object_class->set_property = gitg_revision_view_set_property;
|
||||
object_class->get_property = gitg_revision_view_get_property;
|
||||
|
||||
g_object_class_install_property(object_class, PROP_REPOSITORY,
|
||||
g_param_spec_object("repository",
|
||||
"REPOSITORY",
|
||||
"Repository",
|
||||
GITG_TYPE_REPOSITORY,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
signals[PARENT_ACTIVATED] =
|
||||
g_signal_new("parent-activated",
|
||||
G_OBJECT_CLASS_TYPE (object_class),
|
||||
|
@ -226,19 +283,45 @@ update_parents(GitgRevisionView *self, GitgRevision *revision)
|
|||
return;
|
||||
|
||||
gchar **parents = gitg_revision_get_parents(revision);
|
||||
gchar **ptr;
|
||||
gint num = g_strv_length(parents);
|
||||
gint i;
|
||||
|
||||
for (ptr = parents; *ptr; ++ptr)
|
||||
gtk_table_resize(self->priv->parents, num, 2);
|
||||
GdkCursor *cursor = gdk_cursor_new(GDK_HAND1);
|
||||
Hash hash;
|
||||
|
||||
for (i = 0; i < num; ++i)
|
||||
{
|
||||
GtkWidget *widget = make_parent_label(self, *ptr);
|
||||
gtk_box_pack_start(GTK_BOX(self->priv->parents), widget, FALSE, TRUE, 0);
|
||||
GtkWidget *widget = make_parent_label(self, parents[i]);
|
||||
gtk_table_attach(self->priv->parents, widget, 0, 1, i, i + 1, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 0, 0);
|
||||
|
||||
gtk_widget_realize(widget);
|
||||
GdkCursor *cursor = gdk_cursor_new(GDK_HAND1);
|
||||
gdk_window_set_cursor(widget->window, cursor);
|
||||
gdk_cursor_unref(cursor);
|
||||
|
||||
/* find subject */
|
||||
gitg_utils_sha1_to_hash(parents[i], hash);
|
||||
|
||||
GitgRevision *revision = gitg_repository_lookup(self->priv->repository, hash);
|
||||
|
||||
if (revision)
|
||||
{
|
||||
GtkWidget *subject = gtk_label_new(NULL);
|
||||
|
||||
gchar *text = g_strdup_printf("(<i>%s</i>)", gitg_revision_get_subject(revision));
|
||||
gtk_label_set_markup(GTK_LABEL(subject), text);
|
||||
g_free(text);
|
||||
|
||||
gtk_widget_show(subject);
|
||||
|
||||
gtk_misc_set_alignment(GTK_MISC(subject), 0.0, 0.5);
|
||||
gtk_label_set_ellipsize(GTK_LABEL(subject), PANGO_ELLIPSIZE_MIDDLE);
|
||||
gtk_label_set_single_line_mode(GTK_LABEL(subject), TRUE);
|
||||
|
||||
gtk_table_attach(self->priv->parents, subject, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_SHRINK, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
gdk_cursor_unref(cursor);
|
||||
g_strfreev(parents);
|
||||
}
|
||||
|
||||
|
@ -326,3 +409,21 @@ gitg_revision_view_update(GitgRevisionView *self, GitgRepository *repository, Gi
|
|||
// Update diff
|
||||
update_diff(self, repository, revision);
|
||||
}
|
||||
|
||||
void
|
||||
gitg_revision_view_set_repository(GitgRevisionView *view, GitgRepository *repository)
|
||||
{
|
||||
g_return_if_fail(GITG_IS_REVISION_VIEW(view));
|
||||
g_return_if_fail(repository == NULL || GITG_IS_REPOSITORY(repository));
|
||||
|
||||
if (view->priv->repository)
|
||||
{
|
||||
g_object_unref(view->priv->repository);
|
||||
view->priv->repository = NULL;
|
||||
}
|
||||
|
||||
if (repository)
|
||||
view->priv->repository = g_object_ref(repository);
|
||||
|
||||
g_object_notify(G_OBJECT(view), "repository");
|
||||
}
|
||||
|
|
|
@ -309,8 +309,12 @@
|
|||
<property name="column_spacing">6</property>
|
||||
<property name="row_spacing">2</property>
|
||||
<child>
|
||||
<object class="GtkVBox" id="vbox_parents">
|
||||
<object class="GtkTable" id="table_parents">
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">1</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="column_spacing">3</property>
|
||||
<property name="row_spacing">2</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include <string.h>
|
||||
#include <glib.h>
|
||||
#include <gconf/gconf-client.h>
|
||||
|
||||
#include "gitg-utils.h"
|
||||
|
||||
|
@ -417,3 +418,33 @@ gitg_utils_menu_position_under_tree_view (GtkMenu *menu,
|
|||
tree);
|
||||
}
|
||||
}
|
||||
|
||||
gchar *
|
||||
gitg_utils_get_monospace_font_name()
|
||||
{
|
||||
GConfClient *client = gconf_client_get_default();
|
||||
gchar *name = gconf_client_get_string(client, "/desktop/gnome/interface/monospace_font_name", NULL);
|
||||
|
||||
g_object_unref(client);
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
void
|
||||
gitg_utils_set_monospace_font(GtkWidget *widget)
|
||||
{
|
||||
gchar *name = gitg_utils_get_monospace_font_name();
|
||||
|
||||
if (name)
|
||||
{
|
||||
PangoFontDescription *description = pango_font_description_from_string(name);
|
||||
|
||||
if (description)
|
||||
{
|
||||
gtk_widget_modify_font(widget, description);
|
||||
pango_font_description_free(description);
|
||||
}
|
||||
}
|
||||
|
||||
g_free(name);
|
||||
}
|
||||
|
|
|
@ -35,5 +35,8 @@ gint gitg_utils_sort_names(gchar const *s1, gchar const *s2);
|
|||
|
||||
void gitg_utils_menu_position_under_widget(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data);
|
||||
void gitg_utils_menu_position_under_tree_view(GtkMenu *menu, gint *x, gint *y, gboolean *push_in, gpointer user_data);
|
||||
|
||||
gchar *gitg_utils_get_monospace_font_name();
|
||||
void gitg_utils_set_monospace_font(GtkWidget *widget);
|
||||
|
||||
#endif /* __GITG_UTILS_H__ */
|
||||
|
|
|
@ -712,6 +712,7 @@ load_repository(GitgWindow *window, gchar const *path, gint argc, gchar const **
|
|||
g_free(ar);
|
||||
|
||||
gitg_commit_view_set_repository(window->priv->commit_view, window->priv->repository);
|
||||
gitg_revision_view_set_repository(window->priv->revision_view, window->priv->repository);
|
||||
|
||||
gchar *basename = g_path_get_basename(gitg_repository_get_path(window->priv->repository));
|
||||
gchar *title = g_strdup_printf("%s - %s", _("gitg"), basename);
|
||||
|
@ -726,6 +727,7 @@ load_repository(GitgWindow *window, gchar const *path, gint argc, gchar const **
|
|||
{
|
||||
clear_branches_combo(window, FALSE);
|
||||
gitg_commit_view_set_repository(window->priv->commit_view, window->priv->repository);
|
||||
gitg_revision_view_set_repository(window->priv->revision_view, window->priv->repository);
|
||||
|
||||
handle_no_gitdir(window);
|
||||
gtk_window_set_title(GTK_WINDOW(window), _("gitg"));
|
||||
|
|
Loading…
Reference in a new issue