zik 0.16.2 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data.tar.gz.sig CHANGED
Binary file
data/ChangeLog CHANGED
@@ -1,3 +1,25 @@
1
+ ###Version 0.17.0
2
+ Use new icons picture. Thanks J. Kaiden for the artwork.
3
+ Add choices for theme in preferences window.
4
+ Tray icon: add a option to hide ZiK on close.
5
+ Hotkeys: add hide/show ZiK.
6
+ Do not freeze browser when editing playlist (close bug #28638).
7
+ Multi and single sessions were switched in preferences dialog.
8
+ Choice between multi and single sessions is applied immediately.
9
+ Fix a bug in hotkeys module that prevents multi-sessions.
10
+ Fix a bug that can prevent loading previous browser view.
11
+ Brainz module: fix a in error handling (thanks Merle from forum.ubuntu-fr.org for the report).
12
+ Show the info dialog only the first time playlist is edited.
13
+ Restore position when showing main window.
14
+ Add scrollbars for the assistant.
15
+
16
+ Support only "zik" command to launch ZiK (nor ZiK or ZiK.rb).
17
+ Drop support of old version of rghk (< 0.2)
18
+ Start to implement XDG base directory specification for user directories.
19
+
20
+ translation:
21
+ update french.
22
+
1
23
  ###Version 0.16.2
2
24
  Fix a bug : ZiK crash when showing an error before main window is defined.
3
25
  Fix a bug: ZiK crash when loading a module failed.
data/Makefile.in CHANGED
@@ -1,5 +1,5 @@
1
1
  NAME=ZiK
2
- VERSION=0.16.2
2
+ VERSION=0.17.0
3
3
 
4
4
  SHELL=/bin/sh
5
5
  RUBY=/usr/bin/ruby
@@ -31,6 +31,8 @@ HTMLFILES=$(wildcard $(SRCDIR)/doc/html/*.html)
31
31
  HTMLFILESPIX=$(wildcard $(SRCDIR)/doc/html/pix/*.png)
32
32
  HTMLFILESCSS=$(wildcard $(SRCDIR)/doc/html/styles/*.css)
33
33
  HTMLLANGUAGES=fr
34
+ THEMEDIR=$(DATADIR)/$(NAME)/theme
35
+ THEMES=dark ligth
34
36
  GUIDIR=$(DATADIR)/$(NAME)/gui
35
37
  GUIFILES=$(wildcard $(SRCDIR)/gui/*.rb)
36
38
  PIXDIR=$(DATADIR)/$(NAME)/pix
@@ -70,22 +72,27 @@ check-depend: dependencies
70
72
  test: zik
71
73
  $(RUBY) -c zik
72
74
 
73
- install: install-exec install-link install-data install-desktop install-module install-doc install-local
75
+ install: install-exec install-data install-desktop install-module install-doc install-local
74
76
 
75
77
  install-exec: zik
76
78
  $(INSTALL_DIR) $(DESTDIR)$(BINDIR)
77
79
  $(INSTALL_PROGRAM) $(SRCDIR)/zik $(DESTDIR)$(BINDIR)/zik
78
80
 
79
- install-link:
80
- ln --symbolic $(BINDIR)/zik $(DESTDIR)$(BINDIR)/ZiK
81
-
82
- install-data:
81
+ install-data: install-theme
83
82
  $(INSTALL_DIR) $(DESTDIR)$(GUIDIR) $(DESTDIR)$(PIXDIR) $(DESTDIR)$(PIXDIR)/assistant $(DESTDIR)$(PLAYLISTDIR) $(DESTDIR)$(PLAYERDIR)
84
83
  $(INSTALL_DATA) $(GUIFILES) $(DESTDIR)$(GUIDIR)
85
84
  $(INSTALL_DATA) $(PIXFILES) $(DESTDIR)$(PIXDIR)
86
85
  $(INSTALL_DATA) $(PLAYLISTFILES) $(DESTDIR)$(PLAYLISTDIR)
87
86
  $(INSTALL_DATA) $(PLAYERFILES) $(DESTDIR)$(PLAYERDIR)
88
87
 
88
+ install-theme:
89
+ $(INSTALL_DIR) $(DESTDIR)$(THEMEDIR)
90
+ for theme in $(THEMES); do \
91
+ $(INSTALL_DIR) $(DESTDIR)$(THEMEDIR)/$$theme; \
92
+ # echo $(SRCDIR)/theme/$theme/*; \
93
+ $(INSTALL_DATA) $(SRCDIR)/theme/$$theme/* $(DESTDIR)$(THEMEDIR)/$$theme; \
94
+ done
95
+
89
96
  install-desktop:
90
97
  $(INSTALL_DIR) $(DESTDIR)$(DESKTOPDIR)
91
98
  $(INSTALL_DESKTOP) $(DESTDIR)$(DESKTOPDIR) $(SRCDIR)/zik.desktop
@@ -148,18 +155,18 @@ install-local:
148
155
  $(INSTALL_DATA) $(SRCDIR)/locale/$$lang/LC_MESSAGES/ZiK.mo $(DESTDIR)$(LOCALEDIR)/$$lang/LC_MESSAGES; \
149
156
  done
150
157
 
151
- uninstall: uninstall-exec uninstall-link uninstall-data uninstall-desktop uninstall-module uninstall-doc uninstall-local
158
+ uninstall: uninstall-exec uninstall-data uninstall-desktop uninstall-module uninstall-doc uninstall-local
152
159
 
153
160
  uninstall-exec:
154
161
  rm -f $(DESTDIR)$(BINDIR)/zik
155
-
156
- uninstall-link:
157
- rm -f $(DESTDIR)$(BINDIR)/ZiK
158
162
 
159
- uninstall-data:
163
+ uninstall-data: uninstall-theme
160
164
  rm -rf $(DESTDIR)$(GUIDIR) $(DESTDIR)$(PIXDIR) $(DESTDIR)$(PLAYLISTDIR) $(DESTDIR)$(PLAYERDIR)
161
165
  rmdir $(DESTDIR)$(DATADIR)/$(NAME) --ignore-fail-on-non-empty
162
166
 
167
+ uninstall-theme:
168
+ rm -rf $(DESTDIR)$(THEMEDIR)
169
+
163
170
  uninstall-desktop:
164
171
  rm -f $(DESTDIR)$(DESKTOPDIR)/zik.desktop
165
172
  $(UPDATE_MIME)
data/README CHANGED
@@ -20,6 +20,10 @@ gst-plugins-ugly http://gstreamer.freedesktop.org/
20
20
  For other format suppport (ie: mp3,wav), check gstreamer plug-ins:
21
21
  gst-plugins-* http://gstreamer.freedesktop.org/
22
22
 
23
+ For modules:
24
+ cover -> ruby-mp3info http://rubyforge.org/projects/ruby-mp3info/
25
+ notify -> ruby-libnotify http://ruby-libnotify.rubyforge.org/
26
+ hotkeys -> rghk http://zik.rubyforge.org/rghk/
23
27
 
24
28
  You can use check the dependencies by running (after running the configure script):
25
29
  make check-depend
data/ZiK.rb CHANGED
@@ -101,6 +101,7 @@ end
101
101
 
102
102
  Data_dir=File.dirname(__FILE__)
103
103
  Pix_dir=File.join(Data_dir,'pix')
104
+ Theme_dir=File.join(Data_dir, 'theme')
104
105
  Doc_dir=File.join(Data_dir,'doc')
105
106
  Locale_dir=File.join(Data_dir,'locale')
106
107
 
@@ -111,18 +112,38 @@ require File.join(Data_dir, 'gui/error')
111
112
  estock=ErrorsStock.new
112
113
 
113
114
  ErrorInfo.new("Hi! This is #{$name} (#{Version}). Enjoy your music.")
114
- ErrorWarning.new("ZiK is deprecated. You should call ZiK by zik") if __FILE__=~/ZiK$/
115
115
 
116
116
  #Global configuration
117
117
  $border=5
118
118
 
119
119
  #Configuration
120
120
  require File.join(Data_dir, 'gui/config')
121
- User_dir=File.join(ENV['HOME'],'.ZiK') unless (defined? User_dir)
121
+ if (defined? User_dir)
122
+ Cache_dir=File.join('User_dir', 'cache')
123
+ Runtime_dir=File.join('User_dir', 'runtime')
124
+ else
125
+ User_dir= ENV['XDG_CONFIG_HOME'] ? File.join(ENV['XDG_CONFIG_HOME'], 'ZiK') :
126
+ File.join(ENV['HOME'], '.config', 'ZiK')
127
+ unless File.exist?(User_dir)#Check for deprecated location of User_dir
128
+ old_user_dir=File.join(ENV['HOME'],'.ZiK')
129
+ File.rename(old_user_dir, User_dir) if File.directory?(old_user_dir)
130
+ end
131
+ Cache_dir= ENV['XDG_CACHE_HOME'] ? File.join(ENV['XDG_CACHE_HOME'], 'ZiK') :
132
+ File.join(ENV['HOME'], '.cache', 'ZiK')
133
+ if ENV['XDG_RUNTIME_DIR']
134
+ Runtime_dir=File.join(ENV['XDG_RUNTIME_DIR'], 'ZiK')
135
+ else
136
+ require 'tempfile'
137
+ Runtime_dir=File.join(Dir.tmpdir, 'ZiK-'+ENV['USER'])
138
+ ErrorWarning.new("XDG_RUNTIME_DIR is not set. #{Runtime_dir} is used instead.")
139
+ end
140
+ end
122
141
  unless File.exist?(User_dir)
123
142
  Dir.mkdir(User_dir)
124
143
  config_new=true
125
144
  end
145
+ Dir.mkdir(Cache_dir) unless File.exist?(Cache_dir)
146
+ Dir.mkdir(Runtime_dir, 0700) unless File.exist?(Runtime_dir)
126
147
  if File.directory?(User_dir)
127
148
  configuration_file=File.join(User_dir,'ZiKrc')
128
149
  config=Configuration.new(configuration_file)
@@ -137,26 +158,23 @@ config['view']=view if view
137
158
 
138
159
  #Socket (client part)
139
160
  module ZiKSocket
140
- Address=File.join(User_dir, 'socket')
161
+ Address=File.join(Runtime_dir, 'socket')
141
162
  end
142
- if config['socket']
143
- require 'socket'
163
+ if File.socket?(ZiKSocket::Address)
144
164
  require File.join(Data_dir, 'gui/socket')
145
- if File.socket?(ZiKSocket::Address)
146
- begin
147
- client=ZiKSocket::Client.new
148
- ErrorInfo.new(_("Multisession : server already exists."))
149
- playfiles.each{|file|
150
- file=File.join(Dir.pwd, file) unless file =~ /^\//#absolute path
151
- p client.command("add #{file}")
152
- }
153
- client.command("show")
154
- client.close
155
- exit 0
156
- rescue Errno::ECONNREFUSED
157
- ErrorError.new(_("Multissession: socket exists but server does not respond."))
158
- File.delete(ZiKSocket::Address)
159
- end
165
+ begin
166
+ client=ZiKSocket::Client.new
167
+ ErrorInfo.new(_("Multisession : server already exists."))
168
+ playfiles.each{|file|
169
+ file=File.join(Dir.pwd, file) unless file =~ /^\//#absolute path
170
+ p client.command("add #{file}")
171
+ }
172
+ client.command("show")
173
+ client.close
174
+ exit 0
175
+ rescue Errno::ECONNREFUSED
176
+ ErrorError.new(_("Multissession: socket exists but server does not respond."))
177
+ File.delete(ZiKSocket::Address)
160
178
  end
161
179
  end
162
180
 
@@ -310,7 +328,8 @@ module ZiKSocket
310
328
  end
311
329
  end
312
330
  if config['socket']
313
- ErrorError.new(_("Multisession: server not started."), true) if ZiKSocket.start_server(gui, config, playlist).status.nil?#Except raise in thread used to start server.
331
+ require File.join(Data_dir, 'gui/socket')
332
+ ZiKSocket.start_server(gui, config, playlist)
314
333
  end
315
334
 
316
335
  #Modules
@@ -372,6 +391,11 @@ ensure
372
391
  cdplayer.stop if $cd
373
392
  radioplayer.stop if $radio
374
393
  ZiKSocket.clean
394
+ begin
395
+ Dir.rmdir(Runtime_dir) if File.directory?(Runtime_dir)
396
+ rescue Errno::ENOTEMPTY
397
+ ErrorError.new("Cannot delete #{Runtime_dir}.")
398
+ end
375
399
  end
376
400
 
377
401
  ErrorInfo.new("Bye.")
data/doc/ChangeLog CHANGED
@@ -1,3 +1,25 @@
1
+ ###Version 0.17.0
2
+ Use new icons picture. Thanks J. Kaiden for the artwork.
3
+ Add choices for theme in preferences window.
4
+ Tray icon: add a option to hide ZiK on close.
5
+ Hotkeys: add hide/show ZiK.
6
+ Do not freeze browser when editing playlist (close bug #28638).
7
+ Multi and single sessions were switched in preferences dialog.
8
+ Choice between multi and single sessions is applied immediately.
9
+ Fix a bug in hotkeys module that prevents multi-sessions.
10
+ Fix a bug that can prevent loading previous browser view.
11
+ Brainz module: fix a in error handling (thanks Merle from forum.ubuntu-fr.org for the report).
12
+ Show the info dialog only the first time playlist is edited.
13
+ Restore position when showing main window.
14
+ Add scrollbars for the assistant.
15
+
16
+ Support only "zik" command to launch ZiK (nor ZiK or ZiK.rb).
17
+ Drop support of old version of rghk (< 0.2)
18
+ Start to implement XDG base directory specification for user directories.
19
+
20
+ translation:
21
+ update french.
22
+
1
23
  ###Version 0.16.2
2
24
  Fix a bug : ZiK crash when showing an error before main window is defined.
3
25
  Fix a bug: ZiK crash when loading a module failed.
data/gui/assistant.rb CHANGED
@@ -23,6 +23,8 @@ class Assistant < Gtk::Assistant
23
23
  def initialize(config, zik=nil)
24
24
  @config=config; @zik=zik
25
25
  super()
26
+ self.title=$name
27
+ self.set_default_size(800, 800)
26
28
  signal_connect('delete_event'){quit}
27
29
  signal_connect('cancel'){quit}
28
30
  signal_connect('close'){close}
@@ -53,11 +55,14 @@ class Assistant < Gtk::Assistant
53
55
  vbox1.border_width=$border
54
56
  vbox1.pack_start(label1)
55
57
  vbox1.pack_start(icapture, false)
56
- append_page(vbox1)
57
- set_page_header_image(vbox1, Gdk::Pixbuf.new(File.join(Pix_dir, 'ZiK3.png'), 128, 64))
58
- set_page_title(vbox1, _("Main window (2/6)"))
59
- set_page_type(vbox1, Gtk::Assistant::PAGE_CONTENT)
60
- set_page_complete(vbox1, true)
58
+ w1=Gtk::ScrolledWindow.new
59
+ w1.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC)
60
+ w1.add_with_viewport(vbox1)
61
+ append_page(w1)
62
+ set_page_header_image(w1, Gdk::Pixbuf.new(File.join(Pix_dir, 'ZiK3.png'), 128, 64))
63
+ set_page_title(w1, _("Main window (2/6)"))
64
+ set_page_type(w1, Gtk::Assistant::PAGE_CONTENT)
65
+ set_page_complete(w1, true)
61
66
 
62
67
  #*********************Page 2******************************
63
68
  #Directories
@@ -78,24 +83,34 @@ Please select at least one Diretory.')
78
83
  vbox2.pack_start(@dirbox, false)
79
84
  vbox2.pack_start(@extbox, false)
80
85
  vbox2.pack_start(label2, false)
81
- append_page(vbox2)
82
- set_page_header_image(vbox2, Gdk::Pixbuf.new(File.join(Pix_dir, 'ZiK3.png'), 128, 64))
83
- set_page_title(vbox2, _("Configuration (3/6)"))
84
- set_page_type(vbox2, Gtk::Assistant::PAGE_CONTENT)
85
- set_page_complete(vbox2, true)
86
+ w2=Gtk::ScrolledWindow.new
87
+ w2.set_policy(Gtk::POLICY_AUTOMATIC,Gtk::POLICY_AUTOMATIC)
88
+ w2.add_with_viewport(vbox2)
89
+ append_page(w2)
90
+ set_page_header_image(w2, Gdk::Pixbuf.new(File.join(Pix_dir, 'ZiK3.png'), 128, 64))
91
+ set_page_title(w2, _("Configuration (3/6)"))
92
+ set_page_type(w2, Gtk::Assistant::PAGE_CONTENT)
93
+ set_page_complete(w2, true)
86
94
 
87
95
  #*********************Page 3******************************
88
96
  label3=Gtk::Label.new(_(
89
97
  "ZiK uses GStreamer to play audio files. GStreamer supports a lot of formats."+" "+
90
98
  "The number of supported formats depends on which gstreamer plug-ins are installed"+" "+
99
+ "If gstreamer plug-ins are missing ZiK will try to install them."+" "+
91
100
  "If you cannot play a file you should check which plug-ins are not installed."+" "+
92
- "More informations on http://zik.rubyforge.org/wiki/wiki.pl?Supported_Formats"))
101
+ "More informations on "))
93
102
  label3.wrap=true
94
- append_page(label3)
95
- set_page_header_image(label3, Gdk::Pixbuf.new(File.join(Pix_dir, 'ZiK3.png'), 128, 64))
96
- set_page_title(label3, _("GStreamer (4/5)"))
97
- set_page_type(label3, Gtk::Assistant::PAGE_CONTENT)
98
- set_page_complete(label3, true)
103
+ b3=Gtk::LinkButton.new(_('http://zik.rubyforge.org/wiki/wiki.pl?Supported_Formats'))
104
+ vbox3=Gtk::VBox.new
105
+ vbox3.spacing=$border
106
+ vbox3.border_width=$border
107
+ vbox3.pack_start(label3, false)
108
+ vbox3.pack_start(b3, false)
109
+ append_page(vbox3)
110
+ set_page_header_image(vbox3, Gdk::Pixbuf.new(File.join(Pix_dir, 'ZiK3.png'), 128, 64))
111
+ set_page_title(vbox3, _("GStreamer (4/5)"))
112
+ set_page_type(vbox3, Gtk::Assistant::PAGE_CONTENT)
113
+ set_page_complete(vbox3, true)
99
114
 
100
115
  #*********************Page 4******************************
101
116
  label4=Gtk::Label.new(_(
data/gui/common.rb CHANGED
@@ -37,7 +37,8 @@ end
37
37
 
38
38
  module Pack
39
39
  private
40
- def hpack(array)
40
+ def hpack(*a)#Accept both forms: hpack([1, 2, 3]) and hpack(1, 2, 3)
41
+ array=*a
41
42
  hbox=Gtk::HBox.new
42
43
  hbox.border_width=$border
43
44
  hbox.spacing=$border
@@ -46,7 +47,8 @@ def hpack(array)
46
47
  hbox.pack_start(el, expand)}
47
48
  hbox
48
49
  end
49
- def vpack(array)
50
+ def vpack(*a)
51
+ array=*a
50
52
  vbox=Gtk::VBox.new
51
53
  vbox.border_width=$border
52
54
  vbox.spacing=$border
data/gui/config.rb CHANGED
@@ -30,7 +30,7 @@ class Configuration < Hash
30
30
  'play_on_start'=>false, 'current_song'=>0, 'volume'=>1.0, 'shuffle'=>false, 'repeat'=>false,
31
31
  'sort_by_track'=>false,
32
32
  'x'=>0, 'y'=>0, 'width'=>500, 'height'=>500, 'view'=>'all', 'paned_position'=>250,
33
- 'playing_color'=>'Pink', 'compact'=>false,
33
+ 'playing_color'=>'Pink', 'theme'=>'dark', 'compact'=>false,
34
34
  'directory'=>',', 'extension'=>'wav,flac,ogg,mp3,wma,xspf,m3u,pls',
35
35
  'sort_directories_first'=>true, 'sort_case_sensitive'=>true, 'refresh_on_start'=>true,
36
36
  'search_in_path'=>true, 'search_in_title'=>false, 'search_in_artist'=>false,
data/gui/gui.rb CHANGED
@@ -114,7 +114,7 @@ class Gui < Gtk::Window
114
114
  @find2_it=Gtk::ImageMenuItem.new(Gtk::Stock::FIND)
115
115
  @find2_it.signal_connect('activate'){search}
116
116
  @edit_it=Gtk::ImageMenuItem.new(Gtk::Stock::EDIT)
117
- @edit_it.signal_connect('activate'){list_edit}
117
+ @edit_it.signal_connect('activate'){GLib::Idle.add{list_edit}}#GLib::Idle.add closes bug #28638
118
118
  @bsave=Gtk::ImageMenuItem.new(Gtk::Stock::SAVE)
119
119
  @separator_it2=Gtk::SeparatorMenuItem.new
120
120
  @bsave.signal_connect('activate'){list_save}
@@ -132,10 +132,7 @@ class Gui < Gtk::Window
132
132
  }
133
133
 
134
134
  @playlist_menu=Gtk::Menu.new
135
- #Do not show @edit_it. See bug 28638
136
- #Fixme
137
- # [@add_it, @rm_it, @clear_it, @find2_it, @edit_it, @bsave, @separator_it2, @bexport,
138
- [@add_it, @rm_it, @clear_it, @find2_it, @bsave, @separator_it2, @bexport,
135
+ [@add_it, @rm_it, @clear_it, @find2_it, @edit_it, @bsave, @separator_it2, @bexport,
139
136
  @separator_it3, @preference_it3].each{|it| @playlist_menu.append(it)}
140
137
 
141
138
  #Radio menu
@@ -472,35 +469,14 @@ class Gui < Gtk::Window
472
469
 
473
470
  #*********************Player zone******************************
474
471
  #View selection
475
- #@icon_theme=Gtk::IconTheme.default
476
- #@idir=@icon_theme.load_icon('gtk-directory', Gtk::IconSize::BUTTON, Gtk::IconTheme::LOOKUP_FORCE_SVG)
477
472
  @viewstore=Gtk::ListStore.new(Gdk::Pixbuf)
478
- ['sound_directory.svg','sound.svg','gtk-directory.svg','player_play.svg'].each{|image|
479
- child=@viewstore.append
480
- child[0]=Gdk::Pixbuf.new(File.join(Pix_dir, image), 24, 24)
481
- }
482
- if $cd
483
- child=@viewstore.append
484
- child[0]=Gdk::Pixbuf.new(File.join(Pix_dir, 'media-cdrom.svg'), 24, 24)
485
- end
486
- if $radio
487
- child=@viewstore.append
488
- child[0]=Gdk::Pixbuf.new(File.join(Pix_dir, 'network-wireless.svg'), 24, 24)
489
- end
490
473
  @renderer3=Gtk::CellRendererPixbuf.new
491
474
  @selectview=Gtk::ComboBox.new(false)
492
475
  @selectview.model=@viewstore
493
476
  @selectview.pack_start(@renderer3,false)
494
477
  @selectview.set_attributes(@renderer3, :pixbuf => 0)
478
+ change_theme
495
479
 
496
- case @config['view']
497
- when 'playlist' then @selectview.active=View::PLAYLIST
498
- when 'browser' then @selectview.active=View::BROWSER
499
- when 'player' then @selectview.active=View::COMPACT
500
- when 'cd' then @selectview.active=View::CD
501
- when 'radio' then @selectview.active=View::RADIO
502
- else @selectview.active=View::ALL
503
- end
504
480
  @selectview.signal_connect('changed'){change_view}
505
481
  #Song title
506
482
  @song_title=Gtk::Label.new
@@ -619,7 +595,7 @@ class Gui < Gtk::Window
619
595
  @vbox.pack_start(@button_container, false, false)
620
596
 
621
597
  super()
622
- self.signal_connect("delete_event") {quit; false}
598
+ self.delete_event_connect
623
599
  self.title=$name
624
600
  @icon_Z=Gdk::Pixbuf.new(File.join(Pix_dir,'ZiK.svg'))
625
601
  self.icon=(@icon_Z)
@@ -635,6 +611,45 @@ class Gui < Gtk::Window
635
611
  self.show
636
612
  end
637
613
 
614
+ def change_theme
615
+ #@icon_theme=Gtk::IconTheme.default
616
+ #@idir=@icon_theme.load_icon('gtk-directory', Gtk::IconSize::BUTTON, Gtk::IconTheme::LOOKUP_FORCE_SVG)
617
+ theme=File.join(Theme_dir, @config['theme'])
618
+ begin
619
+ @viewstore.clear
620
+ %w(all.png playlist.png browser.png compact.png).each{|image|
621
+ child=@viewstore.append
622
+ child[0]=Gdk::Pixbuf.new(File.join(theme, image), 24, 24)
623
+ }
624
+ if $cd
625
+ child=@viewstore.append
626
+ child[0]=Gdk::Pixbuf.new(File.join(theme, 'cd.png'), 24, 24)
627
+ end
628
+ if $radio
629
+ child=@viewstore.append
630
+ child[0]=Gdk::Pixbuf.new(File.join(theme, 'radio.png'), 24, 24)
631
+ end
632
+
633
+ case @config['view']
634
+ when 'playlist' then @selectview.active=View::PLAYLIST
635
+ when 'browser' then @selectview.active=View::BROWSER
636
+ when 'player' then @selectview.active=View::COMPACT
637
+ when 'cd' then @selectview.active=View::CD
638
+ when 'radio' then @selectview.active=View::RADIO
639
+ else @selectview.active=View::ALL
640
+ end
641
+ rescue => e
642
+ ErrorError.new("Cannot find #{@config['theme']} theme.")
643
+ tmp=File.join(Theme_dir, @config.default['theme'])
644
+ if theme==tmp
645
+ raise e
646
+ else
647
+ theme=tmp
648
+ retry
649
+ end
650
+ end
651
+ end
652
+
638
653
  private
639
654
 
640
655
  def change_view
@@ -698,6 +713,15 @@ private
698
713
  end
699
714
 
700
715
  public
716
+
717
+ def delete_event_connect(&block)
718
+ self.signal_handler_disconnect(@id_delete_event) if defined?(@id_delete_event)
719
+ if block
720
+ @id_delete_event=self.signal_connect("delete_event", &block)
721
+ else
722
+ @id_delete_event=self.signal_connect("delete_event"){quit; false}
723
+ end
724
+ end
701
725
 
702
726
  def quit
703
727
  pos=self.position;@config['x']=pos[0];@config['y']=pos[1]
@@ -706,7 +730,19 @@ public
706
730
 
707
731
  Gtk.main_quit
708
732
  end
709
-
733
+
734
+ alias :super_hide :hide
735
+ def hide
736
+ @config['x'], @config['y']=self.position
737
+ super_hide
738
+ end
739
+
740
+ alias :super_show :show
741
+ def show
742
+ self.move(@config['x'],@config['y'])
743
+ super_show
744
+ end
745
+
710
746
  def play(player_wanted=@active_view)
711
747
  case player_wanted
712
748
  when 'default'
@@ -961,9 +997,9 @@ public
961
997
  ErrorInfo.new('Refreshing tree view...')
962
998
  self.cursor=Gdk::Cursor::WATCH
963
999
 
964
- backup=File.join(User_dir,'tree')
1000
+ backup=File.join(Cache_dir,'tree')
965
1001
  unless File.exist?(backup)
966
- Dir.mkdir(backup) if $saveconfig
1002
+ Dir.mkdir(backup) if $write_config
967
1003
  end
968
1004
  BrowseSearchWindow.refresh
969
1005
  @treestore.clear
@@ -983,7 +1019,7 @@ public
983
1019
  files=[]
984
1020
  Find.find(directory){|f| files.push(f) if f=~rexp}
985
1021
  @config['sort_case_sensitive'] ? files.sort! : files=files.sort_by{|f| f.downcase}
986
- if $saveconfig
1022
+ if $write_config
987
1023
  if @config['refresh_on_start']
988
1024
  #Delete list
989
1025
  ff=Dir.glob(File.join(backup,'*'))
@@ -1310,10 +1346,13 @@ _("An error occured while exporting songs.\nUnknown queued object type (#{o.clas
1310
1346
  @table.attach(bok, 7, 8, 8, 9, Gtk::SHRINK, Gtk::SHRINK)
1311
1347
  @bedit.sensitive=false
1312
1348
  @wlist.hide
1313
- dialog=Gtk::MessageDialog.new(self, Gtk::Dialog::MODAL, Gtk::MessageDialog::INFO,
1314
- Gtk::MessageDialog::BUTTONS_CLOSE,
1315
- _("Do not forget to validate your changes after editing the playlist."))
1316
- dialog.run; dialog.destroy
1349
+ unless defined?(@list_edit_dialog)
1350
+ @list_edit_dialog=true
1351
+ dialog=Gtk::MessageDialog.new(self, Gtk::Dialog::MODAL, Gtk::MessageDialog::INFO,
1352
+ Gtk::MessageDialog::BUTTONS_CLOSE,
1353
+ _("Do not forget to validate your changes after editing the playlist."))
1354
+ dialog.run; dialog.destroy
1355
+ end
1317
1356
  end
1318
1357
 
1319
1358
  if $radio
@@ -1373,10 +1412,10 @@ end
1373
1412
  Mod.all.each{|mod| authors.push(" "+mod.title+": "+mod.author)}
1374
1413
  end
1375
1414
  Gtk::AboutDialog.show(self, {:name=>$name, :version=>Version, :program_name=>$name,
1376
- :copyright=>'Copyright 2007-2010 Vincent Carmona', :comments=>_('Audio player'),
1415
+ :copyright=>'Copyright 2007-2011 Vincent Carmona', :comments=>_('Audio player'),
1377
1416
  :website=>'http://zik.rubyforge.org/', :license=>copying,
1378
1417
  :authors=>authors,
1379
- :artists=>["Jakub Steiner", "Lapo Calamandrei", "Andreas Nilsson", "Rodney Dawes", "Vincent Carmona"],
1418
+ :artists=>["Justin Kaiden"],
1380
1419
  :translator_credits=>"Français: Vincent Carmona\n",
1381
1420
  :logo=>Gdk::Pixbuf.new(File.join(Pix_dir,'ZiK3.png'))})
1382
1421
  end