Change of sparklediff UI and start of first start screen

This commit is contained in:
Hylke Bons 2010-07-13 19:23:59 +01:00
parent 3b525009c4
commit 838cab486e
8 changed files with 467 additions and 165 deletions

View file

@ -14,7 +14,11 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
// TODO: Hand cursor when hovering icon view items
// TODO: Use theme colours
using Gtk;
using Mono.Unix;
using System;
namespace SparkleShare {
@ -24,142 +28,224 @@ namespace SparkleShare {
public class RevisionView : VBox
{
public ScrolledWindow ScrolledWindow;
public ComboBox ComboBox;
public Button ButtonPrevious;
public Button ButtonNext;
private int ValueCount;
private Image Image;
// Short alias for the translations
public static string _ (string s)
{
return Catalog.GetString (s);
}
public RevisionView (string [] revisions) : base (false, 6)
public ScrolledWindow ScrolledWindow;
public IconView IconView;
private ToggleButton ToggleButton;
private Viewport Viewport;
private ListStore Store;
private Image Image;
private int Selected;
private int Count;
public RevisionView () : base (false, 0)
{
Image = new Image ();
Count = 0;
Selected = 0;
ToggleButton = new ToggleButton ();
ToggleButton.Clicked += ToggleView;
ToggleButton.Relief = ReliefStyle.None;
ScrolledWindow = new ScrolledWindow ();
ScrolledWindow.AddWithViewport (Image);
Viewport = new Viewport ();
Viewport.Add (new Label (""));
HBox controls = new HBox (false, 3);
controls.BorderWidth = 0;
Arrow arrow_left = new Arrow (ArrowType.Left, ShadowType.None);
ButtonPrevious = new Button ();
ButtonPrevious.Add (arrow_left);
ButtonPrevious.Clicked += PreviousInComboBox;
ButtonPrevious.ExposeEvent += EqualizeSizes;
Store = new ListStore(typeof (Gdk.Pixbuf),
typeof (string),
typeof (int));
ValueCount = 0;
IconView = new IconView (Store);
IconView.SelectionChanged += ChangeSelection;
IconView.MarkupColumn = 1;
IconView.Margin = 12;
IconView.Orientation = Orientation.Horizontal;
IconView.PixbufColumn = 0;
IconView.Spacing = 12;
Image = new Image ();
ComboBox = ComboBox.NewText ();
foreach (string revision in revisions) {
ComboBox.AppendText (revision);
}
ComboBox.Active = 0;
ValueCount = revisions.Length;
Arrow arrow_right = new Arrow (ArrowType.Right, ShadowType.None);
ButtonNext = new Button ();
ButtonNext.Add (arrow_right);
ButtonNext.Clicked += NextInComboBox;
ButtonNext.ExposeEvent += EqualizeSizes;
controls.PackStart (ButtonPrevious, false, false, 0);
controls.PackStart (ButtonNext, false, false, 0);
controls.PackStart (new Label (""), true, false, 0);
controls.PackStart (ComboBox, false, false, 0);
PackStart (controls, false, false, 0);
ScrolledWindow.Add (Viewport);
PackStart (ScrolledWindow, true, true, 0);
Shown += delegate {
UpdateControls ();
};
}
// Equalizes the height and width of a button when exposed
private void EqualizeSizes (object o, ExposeEventArgs args) {
Button button = (Button) o;
button.WidthRequest = button.Allocation.Height;
}
public void NextInComboBox (object o, EventArgs args) {
// Changes the selection and enforces a policy of always having something selected
public void ChangeSelection (object o, EventArgs args)
{
if (ComboBox.Active - 1 >= 0)
ComboBox.Active--;
if (IconView.SelectedItems.Length > 0) {
// UpdateControls ();
TreeIter iter;
Store.GetIter (out iter, IconView.SelectedItems [0]);
SetSelected ((int) Store.GetValue (iter, 2));
}
} else {
IconView.SelectPath (new TreePath (GetSelected ().ToString()));
}
}
public void PreviousInComboBox (object o, EventArgs args) {
if (ComboBox.Active + 1 < ValueCount)
ComboBox.Active++;
// Makes sure everything is in place before showing the widget
new public void ShowAll ()
{
// UpdateControls ();
if (Children.Length == 2) {
ToggleButton = (ToggleButton) Children [0];
ToggleButton.Remove (ToggleButton.Child);
} else {
ToggleButton = new ToggleButton ();
ToggleButton.Relief = ReliefStyle.None;
ToggleButton.Clicked += ToggleView;
PackStart (ToggleButton, false, false, 6);
}
HBox layout_horizontal = new HBox (false, 12);
layout_horizontal.BorderWidth = 6;
TreeIter iter;
Store.GetIter (out iter, new TreePath (GetSelected ().ToString()));
string text = (string) Store.GetValue (iter, 1);
Gdk.Pixbuf pixbuf = (Gdk.Pixbuf) Store.GetValue (iter, 0);
Label label = new Label (text);
label.UseMarkup = true;
Arrow arrow_down = new Arrow (ArrowType.Down, ShadowType.None);
layout_horizontal.PackStart (new Image (pixbuf), false, false, 0);
layout_horizontal.PackStart (label, false, false, 0);
layout_horizontal.PackStart (new Label (""), true, true, 0);
layout_horizontal.PackStart (arrow_down, false, false, 0);
ToggleButton.Add (layout_horizontal);
ReorderChild (ToggleButton, 0);
TreePath path = new TreePath (Selected.ToString());
IconView.SelectPath (path);
base.ShowAll ();
}
// Updates the buttons to be disabled or enabled when needed
public void UpdateControls () {
// Adds a revision to the combobox
public void AddRow (Gdk.Pixbuf pixbuf, string header, string subtext)
{
ButtonPrevious.State = StateType.Normal;
ButtonNext.State = StateType.Normal;
Store.AppendValues (pixbuf, "<b>" + header + "</b>\n<span fgcolor='#777'>" + subtext + "</span>", Count);
IconView.Model = Store;
Count++;
// TODO: Disable Next or Previous buttons when at the first or last value of the combobox
// I can't get this to work! >:(
}
// Toggles between a displayed image and a list of revisions
public void ToggleView (object o, EventArgs args)
{
Viewport.Remove (Viewport.Child);
if (ToggleButton.Active) {
Viewport.Add (IconView);
TreePath path = new TreePath (GetSelected ().ToString());
IconView.ScrollToPath (path, (float) 0.5, (float) 0.5);
} else {
Viewport.Add (Image);
if (ComboBox.Active == ValueCount - 1) {
ButtonPrevious.State = StateType.Insensitive;
}
if (ComboBox.Active == 0) {
ButtonNext.State = StateType.Insensitive;
}
ShowAll ();
}
// Changes the image that is viewed
public void SetImage (Image image) {
public void SetImage (Image image)
{
Image = image;
Remove (ScrolledWindow);
ScrolledWindow = new ScrolledWindow ();
ScrolledWindow.AddWithViewport (Image);
Add (ScrolledWindow);
Viewport.Remove (Viewport.Child);
Viewport.Add (Image);
ToggleButton.Active = false;
ShowAll ();
}
// Returns the image that is currently viewed
public Image GetImage ()
{
return Image;
}
// Selects an item by number
public bool SetSelected (int i)
{
if (i > -1 && i <= Count) {
Selected = i;
return true;
}
return false;
}
// Returns the number of the currently selected item
public int GetSelected ()
{
return Selected;
}
// Looks up an icon from the system's theme
public Gdk.Pixbuf GetIcon (string name, int size)
{
IconTheme icon_theme = new IconTheme ();
icon_theme.AppendSearchPath (System.IO.Path.Combine ("/usr/share/sparkleshare", "icons"));
return icon_theme.LoadIcon (name, size, IconLookupFlags.GenericFallback);
}
}
// Derived class for the image view on the left
public class LeftRevisionView : RevisionView {
public LeftRevisionView (string [] revisions) : base (revisions) {
public class LeftRevisionView : RevisionView
{
ComboBox.Active = 1;
public LeftRevisionView () : base ()
{
// Select the second revision
SetSelected (1);
// Take reading direction for time into account
if (Direction == Gtk.TextDirection.Ltr)
ScrolledWindow.Placement = CornerType.TopRight;
else
@ -171,12 +257,15 @@ namespace SparkleShare {
// Derived class for the image view on the right
public class RightRevisionView : RevisionView {
public RightRevisionView (string [] revisions) : base (revisions) {
public class RightRevisionView : RevisionView
{
ComboBox.Active = 0;
public RightRevisionView () : base ()
{
SetSelected (0);
// Take reading direction for time into account
if (Direction == Gtk.TextDirection.Ltr)
ScrolledWindow.Placement = CornerType.TopLeft;
else
@ -186,5 +275,4 @@ namespace SparkleShare {
}
}

View file

@ -20,6 +20,11 @@ using System;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
namespace SparkleShare {
// The main window for SparkleDiff
@ -54,7 +59,7 @@ namespace SparkleShare {
VBox layout_vertical = new VBox (false, 12);
HBox layout_horizontal = new HBox (false, 12);
HBox layout_horizontal = new HBox (true, 6);
Process process = new Process ();
process.EnableRaisingEvents = true;
@ -63,9 +68,12 @@ namespace SparkleShare {
process.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName (file_path);
process.StartInfo.FileName = "git";
process.StartInfo.Arguments = "log --format=\"%ct\t%an\" " + file_name;
process.StartInfo.Arguments = "log --format=\"%ct\t%an\t%ae\" " + file_name;
process.Start ();
ViewLeft = new LeftRevisionView ();
ViewRight = new RightRevisionView ();
string output = process.StandardOutput.ReadToEnd ();
string [] revisions_info = Regex.Split (output.Trim (), "\n");
@ -76,59 +84,54 @@ namespace SparkleShare {
int timestamp = int.Parse (parts [0]);
string author = parts [1];
string email = parts [2];
string date;
// TRANSLATORS: This is a format specifier according to System.Globalization.DateTimeFormatInfo
if (i == 0)
revisions_info [i] = _("Current Revision") + "\t" + author;
date = "Latest Revision";
else
date = String.Format (_("{0} at {1}"),
UnixTimestampToDateTime (timestamp).ToString (_("ddd MMM d, yyyy")),
UnixTimestampToDateTime (timestamp).ToString (_("H:mm")));
// TRANSLATORS: This is a format specifier according to System.Globalization.DateTimeFormatInfo
revisions_info [i] = UnixTimestampToDateTime (timestamp).ToString (_("d MMM\tH:mm")) +
"\t" + author;
ViewLeft.AddRow (GetAvatar (email, 32), author, date);
ViewRight.AddRow (GetAvatar (email, 32), author, date);
i++;
}
ViewLeft = new LeftRevisionView (revisions_info);
ViewRight = new RightRevisionView (revisions_info);
ViewLeft.SetImage (new RevisionImage (file_path, Revisions [1]));
ViewRight.SetImage (new RevisionImage (file_path, Revisions [0]));
ViewLeft.IconView.SelectionChanged += delegate {
ViewLeft.SetImage (new RevisionImage (file_path, Revisions [ViewLeft.GetSelected ()]));
ViewLeft.ScrolledWindow.Hadjustment = ViewRight.ScrolledWindow.Hadjustment;
ViewLeft.ScrolledWindow.Vadjustment = ViewRight.ScrolledWindow.Vadjustment;
HookUpViews ();
};
ViewRight.IconView.SelectionChanged += delegate {
ViewRight.SetImage (new RevisionImage (file_path, Revisions [ViewRight.GetSelected ()]));
ViewRight.ScrolledWindow.Hadjustment = ViewLeft.ScrolledWindow.Hadjustment;
ViewRight.ScrolledWindow.Vadjustment = ViewLeft.ScrolledWindow.Vadjustment;
HookUpViews ();
};
layout_horizontal.PackStart (ViewLeft);
layout_horizontal.PackStart (ViewRight);
ViewLeft.ComboBox.Changed += delegate {
RevisionImage revision_image;
revision_image = new RevisionImage (file_path, Revisions [ViewLeft.ComboBox.Active]);
ViewLeft.SetImage (revision_image);
HookUpViews ();
ViewLeft.ScrolledWindow.Hadjustment = ViewRight.ScrolledWindow.Hadjustment;
ViewLeft.ScrolledWindow.Vadjustment = ViewRight.ScrolledWindow.Vadjustment;
ViewLeft.UpdateControls ();
};
ViewRight.ComboBox.Changed += delegate {
RevisionImage revision_image;
revision_image = new RevisionImage (file_path, Revisions [ViewRight.ComboBox.Active]);
ViewRight.SetImage (revision_image);
HookUpViews ();
ViewRight.ScrolledWindow.Hadjustment = ViewLeft.ScrolledWindow.Hadjustment;
ViewRight.ScrolledWindow.Vadjustment = ViewLeft.ScrolledWindow.Vadjustment;
ViewRight.UpdateControls ();
};
ResizeToViews ();
@ -156,6 +159,22 @@ namespace SparkleShare {
Add (layout_vertical);
}
// Converts a UNIX timestamp to a more usable time object
public DateTime UnixTimestampToDateTime (int timestamp)
{
DateTime unix_epoch = new DateTime (1970, 1, 1, 0, 0, 0, 0);
return unix_epoch.AddSeconds (timestamp);
}
// Looks up an icon from the system's theme
public Gdk.Pixbuf GetIcon (string name, int size)
{
IconTheme icon_theme = new IconTheme ();
icon_theme.AppendSearchPath (System.IO.Path.Combine ("/usr/share/sparkleshare", "icons"));
return icon_theme.LoadIcon (name, size, IconLookupFlags.GenericFallback);
}
private void ResizeToViews ()
@ -216,14 +235,80 @@ namespace SparkleShare {
}
// Converts a UNIX timestamp to a more usable time object
public DateTime UnixTimestampToDateTime (int timestamp)
public string CombineMore (params string [] Parts)
{
DateTime unix_epoch = new DateTime (1970, 1, 1, 0, 0, 0, 0);
return unix_epoch.AddSeconds (timestamp);
string NewPath = " ";
foreach (string Part in Parts)
NewPath = System.IO.Path.Combine (NewPath, Part);
return NewPath;
}
// Creates an MD5 hash of input
public static string GetMD5 (string s)
{
MD5 md5 = new MD5CryptoServiceProvider ();
Byte[] bytes = ASCIIEncoding.Default.GetBytes (s);
Byte[] encodedBytes = md5.ComputeHash (bytes);
return BitConverter.ToString (encodedBytes).ToLower ().Replace ("-", "");
}
// TODO: Turn this into an avatar fetching library
// TODO: This should be included from SparkleHelpers, but I don't know how to do that
// Gets the avatar for a specific email address and size
public Gdk.Pixbuf GetAvatar (string Email, int Size)
{
UnixUserInfo UnixUserInfo = new UnixUserInfo (UnixEnvironment.UserName);
string HomePath = UnixUserInfo.HomeDirectory;
string SparkleLocalIconPath = CombineMore (HomePath + "/.icons", "sparkleshare");
string AvatarPath = CombineMore (SparkleLocalIconPath, Size + "x" + Size, "status");
if (!Directory.Exists (AvatarPath)) {
Directory.CreateDirectory (AvatarPath);
// SparkleHelpers.DebugInfo ("Config", "Created '" + AvatarPath + "'");
}
string AvatarFilePath = CombineMore (AvatarPath, Email);
if (File.Exists (AvatarFilePath))
return new Gdk.Pixbuf (AvatarFilePath);
else {
// Let's try to get the person's gravatar for next time
WebClient WebClient = new WebClient ();
Uri GravatarUri = new Uri ("http://www.gravatar.com/avatar/" + GetMD5 (Email) +
".jpg?s=" + Size + "&d=404");
string TmpFile = CombineMore ("/home/hbons/dsfdsf.jpg");
if (!File.Exists (TmpFile)) {
WebClient.DownloadFileAsync (GravatarUri, TmpFile);
WebClient.DownloadFileCompleted += delegate {
// File.Delete (AvatarFilePath);
FileInfo TmpFileInfo = new FileInfo (TmpFile);
if (TmpFileInfo.Length > 255)
File.Move (TmpFile, AvatarFilePath);
};
}
// Fall back to a generic icon if there is no gravatar
if (File.Exists (AvatarFilePath))
return new Gdk.Pixbuf (AvatarFilePath);
else
return GetIcon ("avatar-default", Size);
}
}
// Quits the program
private void Quit (object o, EventArgs args)
{

View file

@ -12,6 +12,7 @@ Defines.cs \
SparkleBubble.cs \
SparkleDialog.cs \
SparkleHelpers.cs \
SparkleIntro.cs \
SparklePaths.cs \
SparklePlatform.cs \
SparkleRepo.cs \

View file

@ -34,18 +34,18 @@ namespace SparkleShare {
}
// Get's the avatar for a specific email address and size
// Gets the avatar for a specific email address and size
public static Gdk.Pixbuf GetAvatar (string Email, int Size)
{
string AvatarPath = CombineMore (SparklePaths.SparkleAvatarPath, Size + "x" + Size);
string AvatarPath = CombineMore (SparklePaths.SparkleLocalIconPath, Size + "x" + Size, "status");
if (!Directory.Exists (AvatarPath)) {
Directory.CreateDirectory (AvatarPath);
SparkleHelpers.DebugInfo ("Config", "Created '" + AvatarPath + "'");
}
string AvatarFilePath = CombineMore (AvatarPath, Email);
string AvatarFilePath = CombineMore (AvatarPath, "avatar-" + Email);
if (File.Exists (AvatarFilePath))
return new Gdk.Pixbuf (AvatarFilePath);
@ -85,9 +85,9 @@ namespace SparkleShare {
public static string GetMD5 (string s)
{
MD5 md5 = new MD5CryptoServiceProvider ();
Byte[] Bytes = ASCIIEncoding.Default.GetBytes (s);
Byte[] EncodedBytes = md5.ComputeHash (Bytes);
return BitConverter.ToString (EncodedBytes).ToLower ().Replace ("-", "");
Byte[] bytes = ASCIIEncoding.Default.GetBytes (s);
Byte[] encodedBytes = md5.ComputeHash (bytes);
return BitConverter.ToString (encodedBytes).ToLower ().Replace ("-", "");
}
@ -124,7 +124,8 @@ namespace SparkleShare {
public static Gdk.Pixbuf GetIcon (string Name, int Size)
{
IconTheme IconTheme = new IconTheme ();
IconTheme.AppendSearchPath (CombineMore (SparklePaths.SparkleInstallPath, "icons"));
IconTheme.AppendSearchPath (SparklePaths.SparkleIconPath);
IconTheme.AppendSearchPath (SparklePaths.SparkleLocalIconPath);
return IconTheme.LoadIcon (Name, Size, IconLookupFlags.GenericFallback);
}

View file

@ -0,0 +1,137 @@
// SparkleShare, an instant update workflow to Git.
// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
//
// 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 3 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, see <http://www.gnu.org/licenses/>.
using Gtk;
using Mono.Unix;
using SparkleShare;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Timers;
namespace SparkleShare {
public class SparkleIntro : Window
{
// Short alias for the translations
public static string _ (string s)
{
return Catalog.GetString (s);
}
public SparkleIntro () : base ("")
{
BorderWidth = 0;
SetSizeRequest (600, 400);
Resizable = false;
IconName = "folder-sparkleshare";
WindowPosition = WindowPosition.Center;
HBox layout_horizontal = new HBox (false, 6);
Image side_splash = new Image ("/home/hbons/github/SparkleShare/data/side-splash.png");
layout_horizontal.PackStart (side_splash, false, false, 0);
VBox wrapper = new VBox (false, 0);
VBox layout_vertical = new VBox (false, 0);
Label introduction = new Label ("<span size='xx-large'><b>Welcome to SparkleShare!</b></span>");
introduction.UseMarkup = true;
introduction.Xalign = 0;
Label information = new Label ("Before we can create a SparkleShare folder on this \n" +
"computer, we need a few bits of information from you.");
information.Xalign = 0;
Entry name_entry = new Entry ("");
Label name_label = new Label (_("<b>Full Name:</b>"));
UnixUserInfo unix_user_info = new UnixUserInfo (UnixEnvironment.UserName);
name_entry.Text = unix_user_info.RealName;
name_label.UseMarkup = true;
name_label.Xalign = 0;
Table table = new Table (6, 2, true);
table.RowSpacing = 6;
Entry email_entry = new Entry ("");
Label email_label = new Label (_("<b>Email:</b>"));
email_label.UseMarkup = true;
email_label.Xalign = 0;
Entry server_entry = new Entry ("ssh://gitorious.org/sparkleshare");
Label server_label = new Label (_("<b>Folder Address:</b>"));
server_label.UseMarkup = true;
server_label.Xalign = 0;
server_label.Sensitive = false;
server_entry.Sensitive = false;
CheckButton check_button = new CheckButton ("I already have an existing folder on a SparkleShare server");
check_button.Clicked += delegate {
if (check_button.Active) {
server_label.Sensitive = true;
server_entry.Sensitive = true;
server_entry.HasFocus = true;
} else {
server_label.Sensitive = false;
server_entry.Sensitive = false;
}
ShowAll ();
};
table.Attach (name_label, 0, 1, 0, 1);
table.Attach (name_entry, 1, 2, 0, 1);
table.Attach (email_label, 0, 1, 1, 2);
table.Attach (email_entry, 1, 2, 1, 2);
table.Attach (check_button, 0, 2, 3, 4);
table.Attach (server_label, 0, 1, 4, 5);
table.Attach (server_entry, 1, 2, 4, 5);
HButtonBox controls = new HButtonBox ();
controls.Layout = ButtonBoxStyle.End;
Button done_button = new Button ("Next");
controls.Add (done_button);
layout_vertical.PackStart (introduction, false, false, 0);
layout_vertical.PackStart (information, false, false, 21);
layout_vertical.PackStart (new Label (""), false, false, 0);
layout_vertical.PackStart (table, false, false, 0);
wrapper.PackStart (layout_vertical, true, true, 0);
layout_vertical.BorderWidth = 30;
controls.BorderWidth = 12;
wrapper.PackStart (controls, false, true, 0);
layout_horizontal.PackStart (wrapper, true, true, 0);
Add (layout_horizontal);
ShowAll ();
}
}
}

View file

@ -26,32 +26,20 @@ namespace SparkleShare {
private static UnixUserInfo UnixUserInfo = new UnixUserInfo (UnixEnvironment.UserName);
public static string HomePath = UnixUserInfo.HomeDirectory;
public static string SparklePath = Path.Combine (HomePath ,"SparkleShare");
public static string SparkleTmpPath = Path.Combine (SparklePath, ".tmp");
public static string SparkleConfigPath = SparkleHelpers.CombineMore (HomePath, ".config", "sparkleshare");
public static string SparkleInstallPath = SparkleHelpers.CombineMore (Defines.PREFIX,
public static string SparkleInstallPath = SparkleHelpers.CombineMore (Defines.PREFIX, "sparkleshare");
public static string SparkleLocalIconPath = SparkleHelpers.CombineMore (HomePath, ".icons", "sparkleshare");
public static string SparkleIconPath = SparkleHelpers.CombineMore (Defines.PREFIX,
"sparkleshare", "icons", "hicolor");
public static string SparkleAvatarPath {
get {
string XDG_CACHE_HOME = Environment.GetEnvironmentVariable ("XDG_CACHE_HOME");
if (XDG_CACHE_HOME != null)
return Path.Combine (XDG_CACHE_HOME, "sparkleshare");
else
return SparkleHelpers.CombineMore (HomePath, ".cache", "sparkleshare");
}
}
public static string SparkleIconPath = SparkleHelpers.CombineMore ("usr", "share", "icons", "hicolor");
}
}

View file

@ -137,7 +137,8 @@ namespace SparkleShare {
// Don't create the window and status
// icon when --disable-gui was given
if (!HideUI) {
SparkleIntro intro = new SparkleIntro ();
intro.ShowAll ();
// Show a notification if there are no folders yet
if (SparkleShare.Repositories.Length == 0) {
@ -193,7 +194,7 @@ namespace SparkleShare {
// Create place to store configuration user's home folder
string ConfigPath = SparklePaths.SparkleConfigPath;
string AvatarPath = SparklePaths.SparkleAvatarPath;
string LocalIconPath = SparklePaths.SparkleLocalIconPath;
if (!Directory.Exists (ConfigPath)) {
@ -201,8 +202,8 @@ namespace SparkleShare {
SparkleHelpers.DebugInfo ("Config", "Created '" + ConfigPath + "'");
// Create a place to store the avatars
Directory.CreateDirectory (AvatarPath);
SparkleHelpers.DebugInfo ("Config", "Created '" + AvatarPath + "'");
Directory.CreateDirectory (LocalIconPath);
SparkleHelpers.DebugInfo ("Config", "Created '" + LocalIconPath + "'");
}

View file

@ -48,7 +48,7 @@ namespace SparkleShare {
BorderWidth = 12;
// TRANSLATORS: {0} is a folder name, and {1} is a server address
Title = String.Format(_("{0} on {1}"), SparkleRepo.Name,
Title = String.Format(_("Recent Events in {0} on {1}"), SparkleRepo.Name,
SparkleRepo.RemoteOriginUrl);
IconName = "folder";
@ -232,6 +232,7 @@ namespace SparkleShare {
}
ScrolledWindow = new ScrolledWindow ();
ScrolledWindow.ShadowType = ShadowType.None;
ScrolledWindow.AddWithViewport (layout_vertical);
return ScrolledWindow;