zik 0.16.2 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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