[smuxi] Frontend-GNOME: use 1/6 width as default size for user list and adapt with window resize (closes: #9
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi] Frontend-GNOME: use 1/6 width as default size for user list and adapt with window resize (closes: #9
- Date: Sun, 11 May 2014 15:49:14 +0000 (UTC)
commit 7dca4da78806cf1780ac17c07067686313d230f6
Author: Mirco Bauer <meebey meebey net>
Date: Sun May 11 17:33:14 2014 +0200
Frontend-GNOME: use 1/6 width as default size for user list and adapt with window resize (closes: #917)
This fixes the bug mentioned in 32885265bd04e667b0c94caab64ee1d3b6056556
src/Frontend-GNOME/MainWindow.cs | 21 +++++++++-
src/Frontend-GNOME/Views/Chats/GroupChatView.cs | 49 ++++++-----------------
2 files changed, 32 insertions(+), 38 deletions(-)
---
diff --git a/src/Frontend-GNOME/MainWindow.cs b/src/Frontend-GNOME/MainWindow.cs
index 4cd9365..f8ef746 100644
--- a/src/Frontend-GNOME/MainWindow.cs
+++ b/src/Frontend-GNOME/MainWindow.cs
@@ -69,6 +69,7 @@ namespace Smuxi.Frontend.Gnome
public NotificationAreaIconMode NotificationAreaIconMode { get; set; }
public bool IsMinimized { get; private set; }
public bool IsMaximized { get; private set; }
+ public int WindowWidth { get; private set; }
public bool CaretMode {
get {
@@ -390,7 +391,8 @@ namespace Smuxi.Frontend.Gnome
{
Trace.Call(e);
- TreeViewHPaned.Position = e.Width / 6;
+ WindowWidth = e.Width;
+ CheckLayout();
return base.OnConfigureEvent(e);
}
@@ -520,6 +522,10 @@ namespace Smuxi.Frontend.Gnome
#if LOG4NET
f_Logger.Debug("OnWindowStateEvent(): IsMaximized: " + IsMaximized);
#endif
+ GLib.Idle.Add(() => {
+ CheckLayout();
+ return false;
+ });
}
} catch (Exception ex) {
Frontend.ShowException(this, ex);
@@ -599,6 +605,7 @@ namespace Smuxi.Frontend.Gnome
}
UpdateTitle(groupChatView, null);
};
+ groupChatView.OutputHPaned.Position = (WindowWidth / 6) * 4;
}
UpdateProgressBar();
}
@@ -645,6 +652,18 @@ namespace Smuxi.Frontend.Gnome
}
}
+ void CheckLayout()
+ {
+ TreeViewHPaned.Position = WindowWidth / 6;
+ foreach (var chat in ChatViewManager.Chats) {
+ if (!(chat is GroupChatView)) {
+ continue;
+ }
+ var groupChat = (GroupChatView) chat;
+ groupChat.OutputHPaned.Position = (WindowWidth / 6) * 4;
+ }
+ }
+
private static string _(string msg)
{
return Mono.Unix.Catalog.GetString(msg);
diff --git a/src/Frontend-GNOME/Views/Chats/GroupChatView.cs b/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
index 8964930..1439168 100644
--- a/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
+++ b/src/Frontend-GNOME/Views/Chats/GroupChatView.cs
@@ -112,6 +112,12 @@ namespace Smuxi.Frontend.Gnome
}
}
+ public Gtk.HPaned OutputHPaned {
+ get {
+ return _OutputHPaned;
+ }
+ }
+
static GroupChatView()
{
IconPixbuf = Frontend.LoadIcon(
@@ -128,16 +134,6 @@ namespace Smuxi.Frontend.Gnome
// person list
Participants = new List<PersonModel>();
_OutputHPaned = new Gtk.HPaned();
- _OutputHPaned.ButtonPressEvent += (sender, e) => {;
- // reset person list size on double click
- if (e.Event.Type == Gdk.EventType.TwoButtonPress &&
- e.Event.Button == 1) {
- GLib.Timeout.Add(200, delegate {
- _OutputHPaned.Position = -1;
- return false;
- });
- }
- };
Gtk.TreeView tv = new Gtk.TreeView();
_PersonTreeView = tv;
@@ -145,29 +141,6 @@ namespace Smuxi.Frontend.Gnome
PersonScrolledWindow = sw;
sw.ShadowType = Gtk.ShadowType.None;
sw.HscrollbarPolicy = Gtk.PolicyType.Never;
- sw.SizeRequested += (o, args) => {
- // predict and set useful treeview width
- var persons = SyncedPersons;
- if (persons == null || persons.Count == 0) {
- return;
- }
-
- int longestNameWidth = 0;
- foreach (var person in persons.Values) {
- int lineWidth, lineHeigth;
- using (var layout = _PersonTreeView.CreatePangoLayout(person.IdentityName)) {
- layout.GetPixelSize(out lineWidth, out lineHeigth);
- }
- if (lineWidth > longestNameWidth) {
- longestNameWidth = lineWidth;
- }
- }
-
- var bestSize = new Gtk.Requisition() {
- Width = longestNameWidth
- };
- args.Requisition = bestSize;
- };
//tv.CanFocus = false;
tv.BorderWidth = 0;
@@ -175,12 +148,15 @@ namespace Smuxi.Frontend.Gnome
sw.Add(tv);
Gtk.TreeViewColumn column;
- Gtk.CellRendererText cellr = new Gtk.CellRendererText();
+ var cellr = new Gtk.CellRendererText() {
+ Ellipsize = Pango.EllipsizeMode.End
+ };
IdentityNameCellRenderer = cellr;
column = new Gtk.TreeViewColumn(String.Empty, cellr);
column.SortColumnId = 0;
column.Spacing = 0;
column.SortIndicator = false;
+ column.Expand = true;
column.Sizing = Gtk.TreeViewColumnSizing.Autosize;
// FIXME: this callback leaks memory
column.SetCellDataFunc(cellr, new Gtk.TreeCellDataFunc(RenderPersonIdentityName));
@@ -367,7 +343,6 @@ namespace Smuxi.Frontend.Gnome
_PersonTreeView.Model = ls;
_PersonTreeView.SearchColumn = 0;
- PersonScrolledWindow.CheckResize();
OnParticipantsChanged(EventArgs.Empty);
// TRANSLATOR: this string will be appended to the one above
@@ -548,8 +523,8 @@ namespace Smuxi.Frontend.Gnome
_OutputHPaned.Pack1(_PersonTreeViewFrame, false, true);
_OutputHPaned.Pack2(_OutputVBox, true, true);
} else if (userlist_pos == "right") {
- _OutputHPaned.Pack1(_OutputVBox, true, true);
- _OutputHPaned.Pack2(_PersonTreeViewFrame, false, true);
+ _OutputHPaned.Pack1(_OutputVBox, true, false);
+ _OutputHPaned.Pack2(_PersonTreeViewFrame, false, false);
} else if (userlist_pos == "none") {
_OutputHPaned.Pack1(_OutputVBox, true, true);
} else {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]