1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3 * gui.c
4 * Copyright (C) Kevin DeKorte 2006 <kdekorte@gmail.com>
5 *
6 * gui.c is free software.
7 *
8 * You may redistribute it and/or modify it under the terms of the
9 * GNU General Public License, as published by the Free Software
10 * Foundation; either version 2 of the License, or (at your option)
11 * any later version.
12 *
13 * gui.c is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16 * See the GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with gui.c. If not, write to:
20 * The Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor
22 * Boston, MA 02110-1301, USA.
23 */
24
25 #ifdef HAVE_CONFIG_H
26 #include <config.h>
27 #endif
28
29 #include "gui.h"
30 #include "support.h"
31 #include "common.h"
32 #include "../pixmaps/gnome_mplayer.xpm"
33 /*
34 #include "../pixmaps/media-playback-pause.xpm"
35 #include "../pixmaps/media-playback-start.xpm"
36 #include "../pixmaps/media-playback-stop.xpm"
37 #include "../pixmaps/media-seek-backward.xpm"
38 #include "../pixmaps/media-seek-forward.xpm"
39 #include "../pixmaps/media-skip-backward.xpm"
40 #include "../pixmaps/media-skip-forward.xpm"
41 #include "../pixmaps/view-fullscreen.xpm"
42 */
43 #include "langlist.h"
44 #ifdef NOTIFY_ENABLED
45 #include <libnotify/notify.h>
46 #include <libnotify/notification.h>
47 #endif
48
49 #ifdef LIBGDA_ENABLED
50 #include "database.h"
51 #endif
52
53 GtkWidget *window;
54
55 GtkMenuItem *menuitem_edit_random;
56 GtkMenuItem *menuitem_edit_loop;
57 GtkMenuItem *menuitem_edit_play_single;
58 GtkWidget *repeat;
59 GtkWidget *shuffle;
60 GtkMenuItem *menuitem_edit_select_audio_lang;
61 GtkMenuItem *menuitem_edit_select_sub_lang;
62 GtkWidget *tracks;
63 GtkWidget *subtitles;
64
65 GtkMenuItem *menuitem_view_info;
66 GtkMenuItem *menuitem_view_playlist;
67
68 GtkMenuItem *menuitem_prev;
69 GtkMenuItem *menuitem_next;
70
71 GtkWidget *pane;
72 GtkWidget *hbox;
73
74 GtkWidget *media;
75 GtkWidget *cover_art;
76 GtkWidget *audio_meter;
77
78 GtkWidget *details_table;
79
80 GtkWidget *play_event_box;
81
82 GtkWidget *prev_event_box;
83 GtkWidget *next_event_box;
84 GtkWidget *menu_event_box;
85 GtkWidget *fs_event_box;
86
87 GmtkMediaTracker *tracker;
88 GtkWidget *vol_slider;
89
90 GtkWidget *conf_volume_label;
91
92 #ifdef GTK2_12_ENABLED
93 #else
94 GtkTooltips *tooltip;
95 #endif
96
97 // Playlist container
98 GtkWidget *plvbox;
99 GSList *lang_group;
100 GSList *audio_group;
101
102 GtkAccelGroup *accel_group;
103
104 gint buckets[METER_BARS];
105 gint max_buckets[METER_BARS];
106 gchar **accel_keys;
107 gchar **accel_keys_description;
108
109 gint cache_size;
110 gint plugin_audio_cache_size;
111 gint plugin_video_cache_size;
112 gboolean forcecache;
113 gint osdlevel;
114 gint pplevel;
115 gint streaming;
116 gboolean showcontrols;
117 gboolean showsubtitles;
118 gint fullscreen;
119 gint init_fullscreen;
120 gboolean videopresent;
121 gboolean playlist;
122 gint embed_window;
123 gint window_x;
124 gint window_y;
125 gint control_id;
126 gboolean softvol;
127 gboolean remember_softvol;
128 gdouble volume_softvol;
129 gint volume_gain;
130 gint pref_volume;
131 gint verbose;
132 gint autostart;
133 //gint actual_x, actual_y;
134 //gint play_x, play_y;
135 gint last_window_width, last_window_height;
136 //gchar vm[10];
137 gchar *vo;
138 gchar *option_vo;
139 gboolean use_hardware_codecs;
140 gboolean use_crystalhd_codecs;
141 AudioDevice audio_device;
142 gchar *audio_device_name;
143 gint audio_channels;
144 gboolean use_hw_audio;
145 gboolean disable_deinterlace;
146 gboolean disable_framedrop;
147 gboolean disable_context_menu;
148 gboolean disable_fullscreen;
149 gboolean disable_pause_on_click;
150 gboolean enable_global_menu;
151 gboolean enable_nautilus_plugin;
152 gint loop;
153 gint start_second;
154 gint play_length;
155 gint random_order;
156 gboolean dontplaynext;
157 gboolean autopause;
158 gchar *path;
159 gint js_state;
160 gchar *rpconsole;
161 gchar *rpcontrols;
162 gboolean control_instance;
163 gchar *playlistname;
164 gboolean ok_to_play;
165 gchar *subtitle;
166 gchar *alang;
167 gchar *slang;
168 gchar *metadata_codepage;
169 gboolean use_mplayer2;
170 gboolean vertical_layout;
171 gboolean playlist_visible;
172 gboolean details_visible;
173 gboolean restore_controls;
174 gboolean update_control_flag;
175 //gint restore_pane;
176 //gboolean updating_recent;
177 gboolean disable_ass;
178 gboolean disable_embeddedfonts;
179 gboolean disable_animation;
180 gint auto_hide_timeout;
181 gboolean always_hide_after_timeout;
182 gboolean mouse_over_controls;
183 gchar *subtitlefont;
184 gdouble subtitle_scale;
185 gchar *subtitle_codepage;
186 gchar *subtitle_color;
187 gboolean subtitle_outline;
188 gboolean subtitle_shadow;
189 gint subtitle_margin;
190 gint subtitle_fuzziness;
191 gboolean quit_on_complete;
192 gchar *mplayer_bin;
193 gchar *mplayer_dvd_device;
194 gchar *option_dvd_device;
195 gchar *extraopts;
196 gboolean resize_on_new_media;
197 gboolean single_instance;
198 gboolean replace_and_play;
199 gboolean bring_to_front;
200 gboolean show_notification;
201 gboolean show_status_icon;
202 gchar *gpod_mount_point;
203 gboolean disable_cover_art_fetch;
204 //gboolean updating_recent;
205 gboolean large_buttons;
206 GtkIconSize button_size;
207 gboolean skip_fixed_allocation_on_show;
208 gboolean skip_fixed_allocation_on_hide;
209 gboolean mouse_wheel_changes_volume;
210 ResumeMode resume_mode;
211
212 gboolean remember_loc;
213 gboolean use_remember_loc;
214 gboolean save_loc;
215 gint loc_window_x;
216 gint loc_window_y;
217 gint loc_window_height;
218 gint loc_window_width;
219 gint loc_panel_position;
220 gboolean keep_on_top;
221
222 gboolean cancel_folder_load;
223
224 GThreadPool *retrieve_metadata_pool;
225 GMutex *retrieve_mutex;
226 GMutex *set_mutex;
227
228 gboolean use_mediakeys;
229 gboolean use_defaultpl;
230
231 gboolean qt_disabled;
232 gboolean real_disabled;
233 gboolean wmp_disabled;
234 gboolean dvx_disabled;
235 gboolean midi_disabled;
236 gboolean embedding_disabled;
237 gboolean disable_embedded_scaling;
238
239 GArray *data;
240 GArray *max_data;
241 gboolean reading_af_export;
242
243 //gboolean sub_source_file;
244
245 // layout variables
246 gint non_fs_width;
247 gint non_fs_height;
248
249 // playlist stuff
250 GtkListStore *playliststore;
251 GtkTreeIter iter;
252 GtkTreeIter *next_iter;
253 GtkTreeSelection *selection;
254 GtkWidget *list;
255
256 // preference store
257 GmPrefStore *gm_store;
258 GmPrefStore *gmp_store;
259
260 // cover
261 gchar *cover_art_uri;
262
263 gchar *default_playlist;
264 gboolean safe_to_save_default_playlist;
265
266 #ifdef GTK2_12_ENABLED
267 GtkRecentManager *recent_manager;
268 #endif
269
270 #ifdef LIBGDA_ENABLED
271 GdaConnection *db_connection;
272 #endif
273
274 gboolean screensaver_disabled;
275
276 gint window_width, window_height;
277
278 GtkWidget *plclose;
279 IdleData *idledata;
280 GMutex *fs_controls_lock;
281 PLAYSTATE guistate;
282 PLAYSTATE lastguistate;
283
284 static GdkWindow *window_container;
285 static GtkWidget *fs_window;
286 static GtkWidget *fs_controls;
287
288 static GtkWidget *menubar;
289 static GtkMenuItem *menuitem_file;
290 static GtkMenu *menu_file;
291 static GtkMenuItem *menuitem_file_open;
292 static GtkMenuItem *menuitem_file_open_folder;
293 static GtkMenuItem *menuitem_file_open_location;
294 static GtkMenuItem *menuitem_file_disc;
295 static GtkMenu *menu_file_disc;
296 static GtkMenuItem *menuitem_file_open_acd;
297 static GtkMenuItem *menuitem_file_open_sep1;
298 //static GtkMenuItem *menuitem_file_open_dvd;
299 static GtkMenuItem *menuitem_file_open_dvdnav;
300 //static GtkMenuItem *menuitem_file_open_dvd_folder;
301 static GtkMenuItem *menuitem_file_open_dvdnav_folder;
302 //static GtkMenuItem *menuitem_file_open_dvd_iso;
303 static GtkMenuItem *menuitem_file_open_dvdnav_iso;
304 static GtkMenuItem *menuitem_file_open_sep2;
305 static GtkMenuItem *menuitem_file_open_vcd;
306
307 static GtkMenuItem *menuitem_file_tv;
308 static GtkMenu *menu_file_tv;
309 static GtkMenuItem *menuitem_file_open_atv;
310 static GtkMenuItem *menuitem_file_open_dtv;
311 #ifdef HAVE_GPOD
312 static GtkMenuItem *menuitem_file_open_ipod;
313 #endif
314 static GtkMenuItem *menuitem_file_recent;
315 static GtkWidget *menuitem_file_recent_items;
316 static GtkMenuItem *menuitem_file_sep2;
317 static GtkMenuItem *menuitem_file_quit;
318
319 static GtkMenuItem *menuitem_edit;
320 static GtkMenu *menu_edit;
321 static GtkMenuItem *menuitem_edit_switch_audio;
322 static GtkMenuItem *menuitem_edit_set_audiofile;
323 static GtkMenuItem *menuitem_edit_set_subtitle;
324 //static GtkMenuItem *menuitem_lang;
325
326 static GtkMenuItem *menuitem_edit_take_screenshot;
327 static GtkMenuItem *menuitem_edit_sep1;
328 static GtkMenuItem *menuitem_edit_config;
329 static GtkMenuItem *menuitem_help;
330 static GtkMenuItem *menuitem_view;
331 static GtkMenu *menu_view;
332 static GtkMenuItem *menuitem_view_details;
333 static GtkMenuItem *menuitem_view_meter;
334 static GtkMenuItem *menuitem_view_sep0;
335 static GtkMenuItem *menuitem_view_fullscreen;
336 static GtkMenuItem *menuitem_view_sep1;
337 static GtkMenuItem *menuitem_view_onetoone;
338 static GtkMenuItem *menuitem_view_twotoone;
339 static GtkMenuItem *menuitem_view_onetotwo;
340 static GtkMenuItem *menuitem_view_onetoonepointfive;
341 //static GtkMenuItem *menuitem_view_sep4;
342 static GtkMenuItem *menuitem_view_aspect;
343 static GtkMenu *menu_view_aspect;
344 static GtkMenuItem *menuitem_view_aspect_default;
345 static GtkMenuItem *menuitem_view_aspect_four_three;
346 static GtkMenuItem *menuitem_view_aspect_sixteen_nine;
347 static GtkMenuItem *menuitem_view_aspect_sixteen_ten;
348 static GtkMenuItem *menuitem_view_aspect_anamorphic;
349 static GtkMenuItem *menuitem_view_aspect_follow_window;
350 static GtkMenuItem *menuitem_view_sep2;
351 static GtkMenuItem *menuitem_view_subtitles;
352 static GtkMenuItem *menuitem_view_smaller_subtitle;
353 static GtkMenuItem *menuitem_view_larger_subtitle;
354 static GtkMenuItem *menuitem_view_decrease_subtitle_delay;
355 static GtkMenuItem *menuitem_view_increase_subtitle_delay;
356 static GtkMenuItem *menuitem_view_sep5;
357 static GtkMenuItem *menuitem_view_angle;
358 static GtkMenuItem *menuitem_view_controls;
359 static GtkMenuItem *menuitem_view_sep3;
360 static GtkMenuItem *menuitem_view_advanced;
361 static GtkMenu *menu_help;
362 static GtkMenuItem *menuitem_help_about;
363
364 static GtkMenu *popup_menu;
365 static GtkMenuItem *menuitem_open;
366 static GtkMenuItem *menuitem_sep3;
367 static GtkMenuItem *menuitem_play;
368 static GtkMenuItem *menuitem_stop;
369 static GtkMenuItem *menuitem_sep1;
370 static GtkMenuItem *menuitem_copyurl;
371 static GtkMenuItem *menuitem_sep2;
372 static GtkMenuItem *menuitem_sep4;
373 static GtkMenuItem *menuitem_save;
374 static GtkMenuItem *menuitem_showcontrols;
375 static GtkMenuItem *menuitem_fullscreen;
376 static GtkMenuItem *menuitem_config;
377 static GtkMenuItem *menuitem_quit;
378 static gulong delete_signal_id;
379
380 static GtkWidget *vbox_master;
381 static GtkWidget *vbox;
382 static GtkWidget *controls_box;
383
384 static GtkWidget *media_hbox;
385 static GtkWidget *media_label;
386 static GtkWidget *details_vbox;
387
388 static GtkWidget *details_video_size;
389 static GtkWidget *details_video_format;
390 static GtkWidget *details_video_codec;
391 static GtkWidget *details_video_fps;
392 static GtkWidget *details_video_bitrate;
393 static GtkWidget *details_video_chapters;
394 static GtkWidget *details_audio_format;
395 static GtkWidget *details_audio_codec;
396 static GtkWidget *details_audio_channels;
397 static GtkWidget *details_audio_bitrate;
398 static GtkWidget *details_audio_samplerate;
399
400 static GdkPixbuf *pb_icon;
401 static GdkPixbuf *pb_button;
402
403 static GList *icon_list;
404
405 static GtkWidget *button_event_box;
406 static GtkWidget *image_button;
407
408 //static GtkWidget *play_button;
409 //static GtkWidget *stop_button;
410 //static GtkWidget *pause_button;
411 //static GtkWidget *ff_button;
412 //static GtkWidget *rew_button;
413
414 //static GtkWidget *pause_event_box;
415 static GtkWidget *stop_event_box;
416 static GtkWidget *ff_event_box;
417 static GtkWidget *rew_event_box;
418
419 //static GtkProgressBar *progress;
420
421 static gboolean in_button;
422
423 static GtkWidget *image_play;
424 static GtkWidget *image_pause;
425 static GtkWidget *image_stop;
426 static GtkWidget *image_ff;
427 static GtkWidget *image_rew;
428 static GtkWidget *image_next;
429 static GtkWidget *image_prev;
430 static GtkWidget *image_menu;
431 static GtkWidget *image_fs;
432 //static GtkWidget *image_icon;
433
434 #ifdef GTK2_12_ENABLED
435 static GtkStatusIcon *status_icon;
436 static GtkWidget *config_show_status_icon;
437 #else
438 static GtkTooltips *volume_tip;
439 #endif
440
441 //static GtkWidget *config_window;
442
443 static GtkWidget *config_vo;
444 static GtkWidget *config_hardware_codecs;
445 static GtkWidget *config_crystalhd_codecs;
446 static GtkWidget *config_ao;
447 static GtkWidget *config_mixer;
448 static GtkWidget *config_audio_channels;
449 static GtkWidget *config_use_hw_audio;
450 #ifndef HAVE_ASOUNDLIB
451 static GtkWidget *config_volume;
452 #endif
453 static GtkWidget *config_cachesize;
454 static GtkWidget *config_plugin_audio_cache_size;
455 static GtkWidget *config_plugin_video_cache_size;
456 static GtkWidget *config_osdlevel;
457 static GtkWidget *config_deinterlace;
458 static GtkWidget *config_framedrop;
459 static GtkWidget *config_pplevel;
460
461 static GtkWidget *config_resume_mode;
462 static GtkWidget *config_playlist_visible;
463 static GtkWidget *config_details_visible;
464 static GtkWidget *config_vertical_layout;
465 static GtkWidget *config_single_instance;
466 static GtkWidget *config_replace_and_play;
467 static GtkWidget *config_bring_to_front;
468 static GtkWidget *config_resize_on_new_media;
469 static GtkWidget *config_pause_on_click;
470 static GtkWidget *config_softvol;
471 static GtkWidget *config_remember_softvol;
472 static GtkWidget *config_volume_gain;
473 static GtkWidget *config_forcecache;
474 static GtkWidget *config_verbose;
475 #ifdef NOTIFY_ENABLED
476 static GtkWidget *config_show_notification;
477 #endif
478 static GtkWidget *config_use_mediakeys;
479 static GtkWidget *config_use_defaultpl;
480 static GtkWidget *config_disable_animation;
481 static GtkWidget *config_disable_cover_art_fetch;
482 static GtkWidget *config_mouse_wheel;
483 static GtkWidget *config_enable_nautilus_plugin;
484
485 static GtkWidget *config_alang;
486 static GtkWidget *config_slang;
487 static GtkWidget *config_metadata_codepage;
488
489 static GtkWidget *config_ass;
490 static GtkWidget *config_embeddedfonts;
491 static GtkWidget *config_subtitle_font;
492 static GtkWidget *config_subtitle_scale;
493 static GtkWidget *config_subtitle_codepage;
494 static GtkWidget *config_subtitle_color;
495 static GtkWidget *config_subtitle_outline;
496 static GtkWidget *config_subtitle_shadow;
497 static GtkWidget *config_subtitle_margin;
498 static GtkWidget *config_subtitle_fuzziness;
499 static GtkWidget *config_show_subtitles;
500
501 static GtkWidget *config_qt;
502 static GtkWidget *config_real;
503 static GtkWidget *config_wmp;
504 static GtkWidget *config_dvx;
505 static GtkWidget *config_midi;
506 static GtkWidget *config_noembed;
507 static GtkWidget *config_noscaling;
508
509 static GtkWidget *config_mplayer_bin;
510 static GtkWidget *config_mplayer_dvd_device;
511 static GtkWidget *config_extraopts;
512 static GtkWidget *config_remember_loc;
513 static GtkWidget *config_keep_on_top;
514
515 static GtkWidget *open_location;
516
517 static GtkWidget *folder_progress_window;
518 static GtkWidget *folder_progress_label;
519 static GtkWidget *folder_progress_bar;
520
521 // Video Settings
522 static GtkWidget *adv_brightness;
523 static GtkWidget *adv_contrast;
524 static GtkWidget *adv_gamma;
525 static GtkWidget *adv_hue;
526 static GtkWidget *adv_saturation;
527
528 static glong last_movement_time;
529
530 static gboolean adjusting;
531 static GtkWidget *config_accel_keys[KEY_COUNT];
532
533 #define PAYLOADNCH 7
534 #define PAYLOADNI 512
535 typedef struct _Export {
536 int nch;
537 int size;
538 unsigned long long counter;
539 gint16 payload[PAYLOADNCH][PAYLOADNI];
540 } Export;
541
media_state_to_playstate(GmtkMediaPlayerMediaState media_state)542 PLAYSTATE media_state_to_playstate(GmtkMediaPlayerMediaState media_state)
543 {
544 PLAYSTATE ret;
545
546 switch (media_state) {
547 case MEDIA_STATE_PAUSE:
548 ret = PAUSED;
549 break;
550
551 case MEDIA_STATE_PLAY:
552 ret = PLAYING;
553 break;
554
555 case MEDIA_STATE_QUIT:
556 case MEDIA_STATE_UNKNOWN:
557 ret = QUIT;
558 break;
559
560 case MEDIA_STATE_STOP:
561 ret = STOPPED;
562 break;
563
564 default:
565 ret = QUIT;
566 break;
567 }
568
569 return ret;
570 }
571
set_media_player_attributes(GtkWidget * widget)572 void set_media_player_attributes(GtkWidget * widget)
573 {
574 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ENABLE_DEBUG, verbose);
575 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_FORCE_CACHE, forcecache);
576 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_CACHE_SIZE, cache_size);
577 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ENABLE_HARDWARE_CODECS,
578 use_hardware_codecs);
579 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ENABLE_CRYSTALHD_CODECS,
580 use_crystalhd_codecs);
581 if (option_vo != NULL) {
582 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VO, option_vo);
583 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ENABLE_HARDWARE_CODECS, FALSE);
584 } else {
585 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VO, vo);
586 }
587 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_EXTRA_OPTS, extraopts);
588 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_PREFERRED_AUDIO_LANGUAGE, alang);
589 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_PREFERRED_SUBTITLE_LANGUAGE, slang);
590 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MPLAYER_BINARY, mplayer_bin);
591 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ENABLE_ADVANCED_SUBTITLES,
592 !disable_ass);
593 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_OUTLINE, subtitle_outline);
594 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_SHADOW, subtitle_shadow);
595 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ENABLE_EMBEDDED_FONTS,
596 !disable_embeddedfonts);
597 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_SCALE, subtitle_scale);
598 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_MARGIN, subtitle_margin);
599 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_COLOR, subtitle_color);
600 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_CODEPAGE, subtitle_codepage);
601 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_FONT, subtitlefont);
602 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_FUZZINESS, subtitle_fuzziness);
603 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE, showsubtitles);
604
605 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_DEINTERLACE, !disable_deinterlace);
606 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AO, audio_device.mplayer_ao);
607 if (softvol) {
608 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SOFTVOL, TRUE);
609 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VOLUME_GAIN, volume_gain);
610 } else {
611 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SOFTVOL,
612 audio_device.type == AUDIO_TYPE_SOFTVOL);
613 }
614 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_CHANNELS, audio_channels);
615 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HARDWARE_AC3, use_hw_audio);
616
617 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_OSDLEVEL, osdlevel);
618 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_POST_PROCESSING_LEVEL, pplevel);
619 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_START_TIME, (gdouble) start_second);
620 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_RUN_TIME, (gdouble) play_length);
621
622 if (embed_window != 0 && disable_embedded_scaling) {
623 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_DISABLE_UPSCALING,
624 disable_embedded_scaling);
625 } else {
626 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_DISABLE_UPSCALING, FALSE);
627 }
628 if (option_dvd_device == NULL) {
629 gmtk_media_player_set_media_device(GMTK_MEDIA_PLAYER(media), idledata->device);
630 } else {
631 gmtk_media_player_set_media_device(GMTK_MEDIA_PLAYER(media), option_dvd_device);
632 }
633
634 }
635
636
add_to_playlist_and_play(gpointer data)637 gboolean add_to_playlist_and_play(gpointer data)
638 {
639 gchar *s = (gchar *) data;
640 gboolean playlist;
641 gchar *buf = NULL;
642
643 selection = NULL;
644
645 gm_log(verbose, G_LOG_LEVEL_DEBUG, "adding '%s' to playlist", s);
646 if (!uri_exists(s) && !streaming_media(s)) {
647 buf = g_filename_to_uri(s, NULL, NULL);
648 } else {
649 buf = g_strdup(s);
650 }
651 if (buf != NULL) {
652 playlist = detect_playlist(buf);
653 if (!playlist) {
654 add_item_to_playlist(buf, playlist);
655 } else {
656 if (!parse_playlist(buf)) {
657 add_item_to_playlist(buf, playlist);
658 }
659 }
660 g_free(buf);
661 }
662 gm_log(verbose, G_LOG_LEVEL_DEBUG, "children = %i",
663 gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL));
664
665 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) == 1
666 || !gtk_list_store_iter_is_valid(playliststore, &iter)) {
667 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
668 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
669 dontplaynext = TRUE;
670 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
671 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
672 g_idle_add(async_play_iter, &iter);
673 if (embed_window == 0 && bring_to_front)
674 present_main_window();
675 }
676 }
677 if (s != NULL)
678 g_free(s);
679 g_idle_add(set_update_gui, NULL);
680 return FALSE;
681 }
682
clear_playlist_and_play(gpointer data)683 gboolean clear_playlist_and_play(gpointer data)
684 {
685 gm_log(verbose, G_LOG_LEVEL_DEBUG, "clearing playlist");
686 gtk_list_store_clear(playliststore);
687 gm_log(verbose, G_LOG_LEVEL_DEBUG, "adding '%s' to playlist", (gchar *) data);
688 add_to_playlist_and_play(data);
689 return FALSE;
690 }
691
view_option_show_callback(GtkWidget * widget,gpointer data)692 void view_option_show_callback(GtkWidget * widget, gpointer data)
693 {
694 skip_fixed_allocation_on_show = TRUE;
695 }
696
view_option_hide_callback(GtkWidget * widget,gpointer data)697 void view_option_hide_callback(GtkWidget * widget, gpointer data)
698 {
699 skip_fixed_allocation_on_hide = TRUE;
700 g_idle_add(set_adjust_layout, NULL);
701 }
702
view_option_size_allocate_callback(GtkWidget * widget,GtkAllocation * allocation,gpointer data)703 void view_option_size_allocate_callback(GtkWidget * widget, GtkAllocation * allocation, gpointer data)
704 {
705
706 //if (widget == plvbox)
707 gm_log(verbose, G_LOG_LEVEL_DEBUG, "plvbox size_allocate_callback");
708 //else
709 gm_log(verbose, G_LOG_LEVEL_DEBUG, "size_allocate_callback");
710
711
712 g_idle_add(set_adjust_layout, NULL);
713 }
714
player_size_allocate_callback(GtkWidget * widget,GtkAllocation * allocation)715 void player_size_allocate_callback(GtkWidget * widget, GtkAllocation * allocation)
716 {
717 if (idledata->videopresent) {
718 non_fs_width = allocation->width;
719 non_fs_height = allocation->height;
720 }
721 gm_log(verbose, G_LOG_LEVEL_DEBUG, "video: %s media size = %i x %i", gm_bool_to_string(idledata->videopresent),
722 non_fs_width, non_fs_height);
723 }
724
set_adjust_layout(gpointer data)725 gboolean set_adjust_layout(gpointer data)
726 {
727 adjusting = FALSE;
728 adjust_layout();
729 return FALSE;
730 }
731
adjust_layout()732 void adjust_layout()
733 {
734 gint total_height;
735 gint total_width;
736 gint handle_size;
737 GtkAllocation alloc = { 0 };
738 GtkAllocation alloc2 = { 0 };
739
740 gm_log(verbose, G_LOG_LEVEL_DEBUG, "media size = %i x %i", non_fs_width, non_fs_height);
741 total_height = non_fs_height;
742 total_width = non_fs_width;
743 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total = %i x %i", total_width, total_height);
744
745 if (idledata->videopresent) {
746 gtk_widget_show(media);
747 } else {
748 gtk_widget_hide(media);
749 }
750
751 if (playlist_visible && remember_loc && !vertical_layout) {
752 total_width = gtk_paned_get_position(GTK_PANED(pane));
753 }
754
755 if (playlist_visible && remember_loc && vertical_layout) {
756 total_height = gtk_paned_get_position(GTK_PANED(pane));
757 }
758
759 if (total_width == 0) {
760 if (playlist_visible && !vertical_layout) {
761 total_width = gtk_paned_get_position(GTK_PANED(pane));
762 } else {
763 if (showcontrols) {
764 gmtk_get_allocation(controls_box, &alloc);
765 total_width = alloc.width;
766 }
767 }
768 }
769
770 if (total_height == 0) {
771 if (playlist_visible && vertical_layout) {
772 total_height = gtk_paned_get_position(GTK_PANED(pane));
773 }
774 }
775
776 if (GTK_IS_WIDGET(media_hbox) && control_id == 0
777 && gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_info))) {
778 if (gmtk_get_visible(media_hbox) == 0) {
779 gtk_widget_show_all(media_hbox);
780 //gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
781 //while (gtk_events_pending())
782 // gtk_main_iteration();
783 }
784 gmtk_get_allocation(media_hbox, &alloc);
785 gm_log(verbose, G_LOG_LEVEL_DEBUG, "media height = %i", alloc.height);
786 total_height += alloc.height;
787 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
788 } else {
789 gtk_widget_hide(media_hbox);
790 }
791
792 if (GTK_IS_WIDGET(details_table)
793 && gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_details))) {
794 if (gmtk_get_visible(details_vbox) == 0) {
795 gtk_widget_show_all(details_vbox);
796 //return;
797 }
798 gmtk_get_allocation(details_vbox, &alloc);
799 gm_log(verbose, G_LOG_LEVEL_DEBUG, "detail height = %i", alloc.height);
800 total_height += alloc.height;
801 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
802 } else {
803 gtk_widget_hide(details_vbox);
804 }
805
806 if (GTK_IS_WIDGET(audio_meter)
807 && gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_meter))) {
808 if (gmtk_get_visible(audio_meter) == 0) {
809 gtk_widget_show_all(audio_meter);
810 //return;
811 }
812 gmtk_get_allocation(audio_meter, &alloc);
813 total_height += alloc.height;
814 } else {
815 gtk_widget_hide(audio_meter);
816 }
817
818 if (GTK_IS_WIDGET(plvbox)
819 && gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist))) {
820 if (gmtk_get_visible(plvbox) == 0) {
821 gtk_widget_show_all(plvbox);
822 //return;
823 }
824 gtk_widget_grab_focus(play_event_box);
825 gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
826 gtk_widget_grab_default(plclose);
827 gtk_widget_style_get(pane, "handle-size", &handle_size, NULL);
828
829 gmtk_get_allocation(plvbox, &alloc);
830 if (vertical_layout) {
831 gm_log(verbose, G_LOG_LEVEL_DEBUG, "totals = %i x %i", total_width, total_height);
832 total_height += alloc.height + handle_size;
833 } else {
834 if (gmtk_get_visible(media_hbox) && idledata->videopresent == FALSE
835 && gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist)) == FALSE) {
836 gmtk_get_allocation(media_hbox, &alloc2);
837 total_width = alloc2.width + handle_size + alloc.width;
838 } else {
839 total_width += handle_size + alloc.width;
840 }
841 }
842
843 if (non_fs_height == 0) {
844 gm_log(verbose, G_LOG_LEVEL_DEBUG, "height = %i", total_height);
845 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
846 if (alloc.height < 16) {
847 total_height = 200;
848 } else {
849 total_height = MAX(total_height, alloc.height);
850 }
851 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
852 }
853
854 } else {
855 if (!idledata->videopresent) {
856 gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
857 }
858 gtk_paned_set_position(GTK_PANED(pane), -1);
859 if (gmtk_get_visible(plvbox) == 1) {
860 gtk_widget_hide(plvbox);
861 //return;
862 }
863 }
864
865 if (!fullscreen) {
866 if (!enable_global_menu) {
867 gmtk_get_allocation(menubar, &alloc);
868 gm_log(verbose, G_LOG_LEVEL_DEBUG, "menubar = %i", alloc.height);
869 if (!fullscreen)
870 total_height += alloc.height;
871 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
872 }
873 }
874
875 if (showcontrols) {
876 gmtk_get_allocation(controls_box, &alloc);
877 gm_log(verbose, G_LOG_LEVEL_DEBUG, "controls height = %i", alloc.height);
878 total_height += alloc.height;
879 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total_height = %i", total_height);
880
881 }
882 gm_log(verbose, G_LOG_LEVEL_DEBUG, "total = %i x %i video = %s", total_width, total_height,
883 gm_bool_to_string(idledata->videopresent));
884
885 if (use_remember_loc) {
886 gm_log(verbose, G_LOG_LEVEL_DEBUG, "setting size to %i x %i", loc_window_width, loc_window_height);
887 gtk_window_resize(GTK_WINDOW(window), loc_window_width, loc_window_height);
888 use_remember_loc = FALSE;
889 } else {
890 if (total_height > 0 && total_width > 0 && idledata->videopresent) {
891 gtk_window_resize(GTK_WINDOW(window), total_width, total_height);
892 }
893 if (total_height > 0 && total_width > 0 && !idledata->window_resized && !remember_loc) {
894 gtk_window_resize(GTK_WINDOW(window), total_width, total_height);
895 }
896 if (total_height > 0 && total_width > 0 && !idledata->videopresent && !vertical_layout
897 && gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist))) {
898 gtk_window_resize(GTK_WINDOW(window), total_width, total_height);
899 }
900 }
901
902
903 return;
904 }
905
hide_buttons(void * data)906 gboolean hide_buttons(void *data)
907 {
908 IdleData *idle = (IdleData *) data;
909
910 if (GTK_IS_WIDGET(ff_event_box)) {
911 if (idle->streaming) {
912 gtk_widget_hide(ff_event_box);
913 gtk_widget_hide(rew_event_box);
914 if (GTK_IS_WIDGET(menuitem_save))
915 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_save), FALSE);
916 } else {
917 if (embed_window == 0 || window_x > 250) {
918 gtk_widget_show_all(ff_event_box);
919 gtk_widget_show_all(rew_event_box);
920 }
921 }
922 }
923 if (GTK_IS_WIDGET(menuitem_view_details))
924 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_details), TRUE);
925
926 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) < 2
927 && !gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
928 gtk_widget_hide(prev_event_box);
929 gtk_widget_hide(next_event_box);
930 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_random), FALSE);
931 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_play_single), FALSE);
932 gtk_widget_hide(GTK_WIDGET(menuitem_prev));
933 gtk_widget_hide(GTK_WIDGET(menuitem_next));
934 } else {
935 gtk_widget_show_all(prev_event_box);
936 gtk_widget_show_all(next_event_box);
937 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_random), TRUE);
938 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_play_single), TRUE);
939 gtk_widget_show(GTK_WIDGET(menuitem_prev));
940 gtk_widget_show(GTK_WIDGET(menuitem_next));
941 }
942
943 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) > 0) {
944 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_loop), TRUE);
945 } else {
946 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_loop), FALSE);
947 }
948
949 return FALSE;
950 }
951
show_copyurl(void * data)952 gboolean show_copyurl(void *data)
953 {
954 gchar *buf;
955
956 gtk_widget_show(GTK_WIDGET(menuitem_copyurl));
957 if (control_id == 0) {
958 buf = g_strdup_printf(_("%s - GNOME MPlayer"), gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)));
959 gtk_window_set_title(GTK_WINDOW(window), buf);
960 g_free(buf);
961 }
962
963 return FALSE;
964
965 }
966
967
set_title_bar(void * data)968 gboolean set_title_bar(void *data)
969 {
970
971 IdleData *idle = (IdleData *) data;
972 gchar *buf;
973 gchar *name = NULL;
974 GtkTreePath *path;
975 gint current = 0, total;
976 gchar *filename = NULL;
977
978 if (data != NULL && idle != NULL && gmtk_get_visible(window)) {
979 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VIDEO_PRESENT)
980 && gmtk_media_player_get_media_type(GMTK_MEDIA_PLAYER(media)) == TYPE_FILE
981 && g_strrstr(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), "/") != NULL) {
982 filename = g_filename_from_uri(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), NULL, NULL);
983 if (filename != NULL) {
984 name = g_strdup(g_strrstr(filename, "/") + 1);
985 g_free(filename);
986 }
987 filename = NULL;
988 } else {
989 name = g_strdup(idle->display_name);
990 }
991
992 total = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL);
993 if (total > 0 && gtk_list_store_iter_is_valid(playliststore, &iter)) {
994 path = gtk_tree_model_get_path(GTK_TREE_MODEL(playliststore), &iter);
995 if (path != NULL) {
996 buf = gtk_tree_path_to_string(path);
997 current = (gint) g_strtod(buf, NULL);
998 g_free(buf);
999 gtk_tree_path_free(path);
1000 }
1001 }
1002 if (total > 1) {
1003 if (name == NULL || strlen(name) < 1) {
1004 buf = g_strdup_printf(_("(%i/%i) - GNOME MPlayer"), current + 1, total);
1005 } else {
1006 buf = g_strdup_printf(_("%s - (%i/%i) - GNOME MPlayer"), name, current + 1, total);
1007 }
1008 } else {
1009 if (name == NULL || strlen(name) < 1) {
1010 buf = g_strdup_printf(_("GNOME MPlayer"));
1011 } else {
1012 buf = g_strdup_printf(_("%s - GNOME MPlayer"), name);
1013 }
1014 }
1015 gtk_window_set_title(GTK_WINDOW(window), buf);
1016 g_free(buf);
1017 g_free(name);
1018 }
1019 return FALSE;
1020 }
1021
set_media_label(void * data)1022 gboolean set_media_label(void *data)
1023 {
1024
1025 IdleData *idle = (IdleData *) data;
1026 gchar *cover_art_file = NULL;
1027 gpointer pixbuf;
1028 GdkPixbuf *scaled;
1029 gdouble aspect;
1030 #ifdef NOTIFY_ENABLED
1031 NotifyNotification *notification;
1032 #endif
1033
1034 if (data != NULL && idle != NULL && GTK_IS_WIDGET(media_label)) {
1035 if (idle->media_info != NULL && strlen(idle->media_info) > 0) {
1036 gtk_label_set_markup(GTK_LABEL(media_label), idle->media_info);
1037 gtk_label_set_max_width_chars(GTK_LABEL(media_label), 10);
1038 }
1039
1040 pixbuf = NULL;
1041 gtk_image_clear(GTK_IMAGE(cover_art));
1042 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) > 0
1043 && gtk_list_store_iter_is_valid(playliststore, &iter)) {
1044 gtk_tree_model_get(GTK_TREE_MODEL(playliststore), &iter, COVERART_COLUMN, &cover_art_file, -1);
1045 }
1046 if (cover_art_file != NULL) {
1047 pixbuf = gdk_pixbuf_new_from_file(cover_art_file, NULL);
1048 if (pixbuf != NULL) {
1049 aspect = gdk_pixbuf_get_width(GDK_PIXBUF(pixbuf)) / gdk_pixbuf_get_height(GDK_PIXBUF(pixbuf));
1050 scaled = gdk_pixbuf_scale_simple(GDK_PIXBUF(pixbuf), 128, 128 * aspect, GDK_INTERP_BILINEAR);
1051 gtk_image_set_from_pixbuf(GTK_IMAGE(cover_art), scaled);
1052 g_object_unref(scaled);
1053 g_object_unref(pixbuf);
1054 }
1055 }
1056 } else {
1057 if (GTK_IS_IMAGE(cover_art))
1058 gtk_image_clear(GTK_IMAGE(cover_art));
1059 if (GTK_IS_WIDGET(media_label)) {
1060 gtk_label_set_markup(GTK_LABEL(media_label), "");
1061 }
1062 return FALSE;
1063 }
1064
1065 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_info)) && control_id == 0
1066 && strlen(idle->media_info) > 0) {
1067 gtk_widget_show_all(media_hbox);
1068 } else {
1069 gtk_widget_hide(media_hbox);
1070 }
1071
1072 if (idle->fromdbus == FALSE) {
1073 dbus_send_rpsignal_with_string("RP_SetMediaLabel", idle->media_info);
1074
1075 #ifdef NOTIFY_ENABLED
1076 if (show_notification && control_id == 0 && !gtk_window_is_active((GtkWindow *) window)) {
1077 notify_init("gnome-mplayer");
1078 #ifdef NOTIFY0_7_ENABLED
1079 notification = notify_notification_new(idle->display_name, idle->media_notification, "gnome-mplayer");
1080 #else
1081 notification = notify_notification_new(idle->display_name, idle->media_notification, "gnome-mplayer", NULL);
1082 #endif
1083 #ifdef GTK2_12_ENABLED
1084 #if !NOTIFY0_7_ENABLED
1085 if (show_status_icon)
1086 notify_notification_attach_to_status_icon(notification, status_icon);
1087 #endif
1088 #endif
1089 notify_notification_show(notification, NULL);
1090 notify_uninit();
1091 }
1092 #endif
1093 if (embed_window == 0 && gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) != 1) {
1094 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist), playlist_visible);
1095 }
1096
1097 }
1098
1099 g_idle_add(set_adjust_layout, NULL);
1100
1101 return FALSE;
1102 }
1103
set_cover_art(gpointer pixbuf)1104 gboolean set_cover_art(gpointer pixbuf)
1105 {
1106 gint width, height;
1107 gfloat aspect;
1108 GdkPixbuf *scaled;
1109
1110 if (pixbuf == NULL) {
1111 if (GTK_IS_IMAGE(cover_art))
1112 gtk_image_clear(GTK_IMAGE(cover_art));
1113 if (strlen(idledata->media_info) > 0) {
1114 //gtk_widget_show_all(media_hbox);
1115 } else {
1116 // gtk_widget_hide(media_hbox);
1117 }
1118 } else {
1119 width = gdk_pixbuf_get_width(GDK_PIXBUF(pixbuf));
1120 height = gdk_pixbuf_get_height(GDK_PIXBUF(pixbuf));
1121 aspect = (gfloat) width / (gfloat) height;
1122 scaled = gdk_pixbuf_scale_simple(GDK_PIXBUF(pixbuf), 128, 128 / aspect, GDK_INTERP_BILINEAR);
1123 gtk_image_set_from_pixbuf(GTK_IMAGE(cover_art), GDK_PIXBUF(scaled));
1124 g_object_unref(pixbuf);
1125 g_object_unref(scaled);
1126 }
1127
1128 g_idle_add(set_adjust_layout, NULL);
1129
1130 //adjust_layout();
1131 return FALSE;
1132 }
1133
set_progress_value(void * data)1134 gboolean set_progress_value(void *data)
1135 {
1136
1137 IdleData *idle = (IdleData *) data;
1138 gchar *text;
1139 struct stat buf = { 0 };
1140 gchar *iterfilename;
1141 gchar *iteruri = NULL;
1142
1143 if (idle == NULL)
1144 return FALSE;
1145
1146 if (GTK_IS_WIDGET(tracker)) {
1147 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_UNKNOWN && rpcontrols == NULL) {
1148 js_state = STATE_BUFFERING;
1149 text = g_strdup_printf(_("Buffering: %2i%%"), (gint) (idle->cachepercent * 100));
1150 gmtk_media_tracker_set_text(tracker, text);
1151 g_free(text);
1152 gtk_widget_set_sensitive(play_event_box, FALSE);
1153 } else {
1154 if (gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_POSITION_PERCENT) > 0.0) {
1155 if (autopause == FALSE)
1156 gtk_widget_set_sensitive(play_event_box, TRUE);
1157 }
1158 }
1159 if (idle->cachepercent < 1.0
1160 && gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
1161 text = g_strdup_printf(_("Paused | %2i%% \342\226\274"), (gint) (idle->cachepercent * 100));
1162 gmtk_media_tracker_set_text(tracker, text);
1163 g_free(text);
1164 } else {
1165 //gmtk_media_tracker_set_text(tracker, idle->progress_text);
1166 }
1167 gmtk_media_tracker_set_cache_percentage(tracker, idle->cachepercent);
1168 }
1169
1170 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) > 0
1171 && gtk_list_store_iter_is_valid(playliststore, &iter)) {
1172 gtk_tree_model_get(GTK_TREE_MODEL(playliststore), &iter, ITEM_COLUMN, &iteruri, -1);
1173 }
1174
1175 if (idle->cachepercent > 0.0 && idle->cachepercent < 0.9 && !forcecache && !streaming_media(iteruri)) {
1176 if (autopause == FALSE && gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY) {
1177 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
1178 g_free(iteruri);
1179 gtk_tree_model_get(GTK_TREE_MODEL(playliststore), &iter, ITEM_COLUMN, &iteruri, -1);
1180 if (iteruri != NULL) {
1181 iterfilename = g_filename_from_uri(iteruri, NULL, NULL);
1182 g_stat(iterfilename, &buf);
1183 gm_log(verbose, G_LOG_LEVEL_DEBUG, "filename = %s", iterfilename);
1184 gm_log(verbose, G_LOG_LEVEL_DEBUG, "disk size = %li, byte pos = %li",
1185 (glong) buf.st_size, idle->byte_pos);
1186 gm_log(verbose, G_LOG_LEVEL_DEBUG, "cachesize = %f, percent = %f", idle->cachepercent,
1187 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
1188 ATTRIBUTE_POSITION_PERCENT));
1189 gm_log(verbose, G_LOG_LEVEL_DEBUG, "will pause = %s",
1190 gm_bool_to_string(((idle->byte_pos + (cache_size * 512)) > buf.st_size)
1191 && !(playlist)));
1192 // if ((idle->percent + 0.10) > idle->cachepercent && ((idle->byte_pos + (512 * 1024)) > buf.st_size)) {
1193 // if ((buf.st_size > 0) && (idle->byte_pos + (cache_size * 512)) > buf.st_size) {
1194 if (((idle->byte_pos + (cache_size * 1024)) > buf.st_size) && !(playlist)) {
1195 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PAUSE);
1196 gtk_widget_set_sensitive(play_event_box, FALSE);
1197 autopause = TRUE;
1198 }
1199 g_free(iterfilename);
1200 g_free(iteruri);
1201 }
1202 }
1203 } else if (autopause == TRUE
1204 && gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
1205 if (idle->cachepercent >
1206 (gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_POSITION_PERCENT) + 0.20)
1207 || (idle->cachepercent >= 0.99 || idle->cachepercent == 0.0)) {
1208 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PLAY);
1209 gtk_widget_set_sensitive(play_event_box, TRUE);
1210 autopause = FALSE;
1211 }
1212 }
1213 }
1214
1215 if (idle->cachepercent > 0.95 || idle->cachepercent == 0.0) {
1216 if (autopause == TRUE && gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
1217 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PLAY);
1218 gtk_widget_set_sensitive(play_event_box, TRUE);
1219 autopause = FALSE;
1220 }
1221 }
1222
1223 if (idle->cachepercent >= 1.0 || idle->cachepercent == 0.0) {
1224 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_save), TRUE);
1225 } else {
1226 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_save), FALSE);
1227 }
1228
1229 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_UNKNOWN) {
1230 gtk_widget_set_sensitive(play_event_box, TRUE);
1231 }
1232
1233 update_status_icon();
1234
1235 if (idle->fromdbus == FALSE) {
1236 dbus_send_rpsignal_with_double("RP_SetPercent",
1237 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
1238 ATTRIBUTE_POSITION_PERCENT));
1239 dbus_send_rpsignal_with_int("RP_SetGUIState",
1240 media_state_to_playstate(gmtk_media_player_get_media_state
1241 (GMTK_MEDIA_PLAYER(media))));
1242 }
1243
1244 return FALSE;
1245 }
1246
set_progress_text(void * data)1247 gboolean set_progress_text(void *data)
1248 {
1249
1250 IdleData *idle = (IdleData *) data;
1251
1252
1253 if (GTK_IS_WIDGET(tracker)) {
1254 gmtk_media_tracker_set_text(tracker, idle->progress_text);
1255 }
1256 if (idle != NULL && idle->fromdbus == FALSE)
1257 dbus_send_rpsignal_with_string("RP_SetProgressText", idle->progress_text);
1258 update_status_icon();
1259 return FALSE;
1260 }
1261
set_progress_time(void * data)1262 gboolean set_progress_time(void *data)
1263 {
1264 gchar *text;
1265
1266 IdleData *idle = (IdleData *) data;
1267
1268 if (idle == NULL)
1269 return FALSE;
1270
1271 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY) {
1272 text = g_strdup_printf(_("Playing"));
1273 } else if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
1274 text = g_strdup_printf(_("Paused"));
1275 } else {
1276 text = g_strdup_printf(_("Idle"));
1277 }
1278
1279 if (idle->cachepercent > 0 && idle->cachepercent < 1.0 && !(playlist) && !forcecache && !idle->streaming) {
1280 g_snprintf(idle->progress_text, sizeof(idle->progress_text), "%s | %2i%% \342\226\274", text,
1281 (int) (idle->cachepercent * 100));
1282 } else {
1283 g_snprintf(idle->progress_text, sizeof(idle->progress_text), "%s", text);
1284 }
1285
1286 gmtk_media_tracker_set_text(tracker, text);
1287 g_free(text);
1288
1289 if (GTK_IS_WIDGET(tracker) && idle->position > 0
1290 && gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_PAUSE) {
1291 gmtk_media_tracker_set_length(tracker, idle->length);
1292 gmtk_media_tracker_set_position(tracker, idle->position);
1293 }
1294
1295 if (idle->fromdbus == FALSE && gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_PAUSE)
1296 dbus_send_rpsignal_with_string("RP_SetProgressText", idle->progress_text);
1297 update_status_icon();
1298
1299 dbus_send_event("TimeChanged", 0);
1300
1301 return FALSE;
1302 }
1303
set_volume_from_slider(gpointer data)1304 gboolean set_volume_from_slider(gpointer data)
1305 {
1306 gdouble vol;
1307
1308 #ifdef GTK2_12_ENABLED
1309 vol = gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider));
1310 #else
1311 vol = gtk_range_get_value(GTK_RANGE(vol_slider));
1312 #endif
1313 if (!gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED)) {
1314 gmtk_media_player_set_volume(GMTK_MEDIA_PLAYER(media), vol);
1315 if (remember_softvol) {
1316 volume_softvol = vol;
1317 set_software_volume(&volume_softvol);
1318 }
1319 }
1320
1321 return FALSE;
1322 }
1323
set_volume_tip(void * data)1324 gboolean set_volume_tip(void *data)
1325 {
1326 #ifndef GTK2_12_ENABLED
1327 gchar *tip_text = NULL;
1328 IdleData *idle = (IdleData *) data;
1329 #endif
1330
1331 if (GTK_IS_WIDGET(vol_slider)) {
1332 #ifdef GTK2_12_ENABLED
1333 // should be automatic
1334 /*
1335 tip_text = gtk_widget_get_tooltip_text(vol_slider);
1336 if (tip_text == NULL || g_ascii_strcasecmp(tip_text, idle->vol_tooltip) != 0)
1337 gtk_widget_set_tooltip_text(vol_slider, idle->vol_tooltip);
1338 g_free(tip_text);
1339 */
1340 #else
1341 gtk_tooltips_set_tip(volume_tip, vol_slider, idle->vol_tooltip, NULL);
1342 #endif
1343 }
1344 return FALSE;
1345 }
1346
set_window_visible(void * data)1347 gboolean set_window_visible(void *data)
1348 {
1349 //gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist),FALSE);
1350 if (GTK_IS_WIDGET(media)) {
1351 if (vertical_layout) {
1352 gtk_widget_show(media);
1353 } else {
1354 gtk_widget_show(vbox);
1355 }
1356 }
1357 return FALSE;
1358 }
1359
set_subtitle_visibility(void * data)1360 gboolean set_subtitle_visibility(void *data)
1361 {
1362 if (GTK_IS_WIDGET(menuitem_view_subtitles)) {
1363 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_subtitles))) {
1364 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE, TRUE);
1365 } else {
1366 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE, FALSE);
1367 }
1368 }
1369 return FALSE;
1370 }
1371
set_update_gui(void * data)1372 gboolean set_update_gui(void *data)
1373 {
1374 GtkTreeViewColumn *column;
1375 gchar *coltitle;
1376 gint count;
1377 gchar **split;
1378 gchar *joined;
1379
1380 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) < 2
1381 && !gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
1382 gtk_widget_hide(prev_event_box);
1383 gtk_widget_hide(next_event_box);
1384 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_random), FALSE);
1385 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_play_single), FALSE);
1386 gtk_widget_hide(GTK_WIDGET(menuitem_prev));
1387 gtk_widget_hide(GTK_WIDGET(menuitem_next));
1388 } else {
1389 gtk_widget_show(prev_event_box);
1390 gtk_widget_show(next_event_box);
1391 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_random), TRUE);
1392 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_play_single), TRUE);
1393 gtk_widget_show(GTK_WIDGET(menuitem_prev));
1394 gtk_widget_show(GTK_WIDGET(menuitem_next));
1395 }
1396
1397 if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) > 0) {
1398 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_loop), TRUE);
1399 } else {
1400 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_loop), FALSE);
1401 }
1402
1403 if (GTK_IS_WIDGET(list)) {
1404 column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), 0);
1405 count = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL);
1406 if (playlistname != NULL && strlen(playlistname) > 0) {
1407 coltitle = g_strdup_printf(_("%s items"), playlistname);
1408 } else {
1409 coltitle = g_strdup_printf(ngettext("Item to Play", "Items to Play", count));
1410 }
1411
1412 split = g_strsplit(coltitle, "_", 0);
1413 joined = g_strjoinv("__", split);
1414 gtk_tree_view_column_set_title(column, joined);
1415 g_free(coltitle);
1416 g_free(joined);
1417 g_strfreev(split);
1418 }
1419 return FALSE;
1420 }
1421
PLAYSTATE_to_string(const PLAYSTATE pstate)1422 static const gchar *PLAYSTATE_to_string(const PLAYSTATE pstate)
1423 {
1424 switch (pstate) {
1425 case PLAYING:
1426 return "playing";
1427 case PAUSED:
1428 return "paused";
1429 case STOPPED:
1430 return "stopped";
1431 case QUIT:
1432 return "quit";
1433 default:
1434 return "???";
1435 }
1436 }
1437
set_gui_state(void * data)1438 gboolean set_gui_state(void *data)
1439 {
1440 gchar *tip_text = NULL;
1441 #ifdef GTK3_ENABLED
1442 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
1443 const gchar *icon_start;
1444
1445 if (gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL)
1446 icon_start = "media-playback-start-rtl-symbolic";
1447 else
1448 icon_start = "media-playback-start-symbolic";
1449 #endif
1450
1451 gm_log(verbose, G_LOG_LEVEL_MESSAGE, "setting gui state to %s", PLAYSTATE_to_string(guistate));
1452
1453 if (lastguistate != guistate) {
1454 if (guistate == PLAYING) {
1455 #ifdef GTK3_ENABLED
1456 if (gtk_icon_theme_has_icon(icon_theme, "media-playback-pause-symbolic")) {
1457 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-pause-symbolic", button_size);
1458 } else {
1459 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
1460 }
1461 #else
1462 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
1463 #endif
1464
1465 #ifdef GTK2_12_ENABLED
1466 tip_text = gtk_widget_get_tooltip_text(play_event_box);
1467 if (tip_text == NULL || g_ascii_strcasecmp(tip_text, _("Pause")) != 0)
1468 gtk_widget_set_tooltip_text(play_event_box, _("Pause"));
1469 g_free(tip_text);
1470 #else
1471 gtk_tooltips_set_tip(tooltip, play_event_box, _("Pause"), NULL);
1472 #endif
1473 gtk_widget_set_sensitive(ff_event_box, TRUE);
1474 gtk_widget_set_sensitive(rew_event_box, TRUE);
1475 gtk_container_remove(GTK_CONTAINER(popup_menu), GTK_WIDGET(menuitem_play));
1476 menuitem_play = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PAUSE, NULL));
1477 g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_pause_callback), NULL);
1478 gtk_menu_shell_insert(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_play), 0);
1479 gtk_widget_show(GTK_WIDGET(menuitem_play));
1480 if (idledata->videopresent)
1481 dbus_disable_screensaver();
1482 }
1483
1484 if (guistate == PAUSED) {
1485 #ifdef GTK3_ENABLED
1486 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
1487 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
1488 } else {
1489 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
1490 }
1491 #else
1492 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
1493 #endif
1494 #ifdef GTK2_12_ENABLED
1495 tip_text = gtk_widget_get_tooltip_text(play_event_box);
1496 if (tip_text == NULL || g_ascii_strcasecmp(tip_text, _("Play")) != 0)
1497 gtk_widget_set_tooltip_text(play_event_box, _("Play"));
1498 g_free(tip_text);
1499 #else
1500 gtk_tooltips_set_tip(tooltip, play_event_box, _("Play"), NULL);
1501 #endif
1502 gtk_widget_set_sensitive(ff_event_box, FALSE);
1503 gtk_widget_set_sensitive(rew_event_box, FALSE);
1504 gtk_container_remove(GTK_CONTAINER(popup_menu), GTK_WIDGET(menuitem_play));
1505 menuitem_play = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PLAY, NULL));
1506 g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_play_callback), NULL);
1507 gtk_menu_shell_insert(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_play), 0);
1508 gtk_widget_show(GTK_WIDGET(menuitem_play));
1509 dbus_enable_screensaver();
1510 //gmtk_media_player_set_state (GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PAUSE);
1511 }
1512
1513 if (guistate == STOPPED) {
1514 #ifdef GTK3_ENABLED
1515 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
1516 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
1517 } else {
1518 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
1519 }
1520 #else
1521 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
1522 #endif
1523 #ifdef GTK2_12_ENABLED
1524 tip_text = gtk_widget_get_tooltip_text(play_event_box);
1525 if (tip_text == NULL || g_ascii_strcasecmp(tip_text, _("Play")) != 0)
1526 gtk_widget_set_tooltip_text(play_event_box, _("Play"));
1527 g_free(tip_text);
1528 #else
1529 gtk_tooltips_set_tip(tooltip, play_event_box, _("Play"), NULL);
1530 #endif
1531 gtk_widget_set_sensitive(ff_event_box, FALSE);
1532 gtk_widget_set_sensitive(rew_event_box, FALSE);
1533 gtk_container_remove(GTK_CONTAINER(popup_menu), GTK_WIDGET(menuitem_play));
1534 menuitem_play = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PLAY, NULL));
1535 g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_play_callback), NULL);
1536 gtk_menu_shell_insert(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_play), 0);
1537 gtk_widget_show(GTK_WIDGET(menuitem_play));
1538 dbus_enable_screensaver();
1539 //gmtk_media_player_set_state (GMTK_MEDIA_PLAYER(media), MEDIA_STATE_STOP);
1540 }
1541 lastguistate = guistate;
1542 }
1543 return FALSE;
1544 }
1545
set_metadata(gpointer data)1546 gboolean set_metadata(gpointer data)
1547 {
1548 MetaData *mdata = (MetaData *) data;
1549 GtkTreeIter *riter;
1550
1551 if (mdata == NULL) {
1552 return FALSE;
1553 }
1554
1555 g_mutex_lock(set_mutex);
1556 riter = find_iter_by_uri(mdata->uri);
1557
1558 if (gtk_list_store_iter_is_valid(playliststore, riter)) {
1559 if (mdata != NULL) {
1560 gtk_list_store_set(playliststore, riter,
1561 DESCRIPTION_COLUMN, mdata->title,
1562 ARTIST_COLUMN, mdata->artist,
1563 ALBUM_COLUMN, mdata->album,
1564 SUBTITLE_COLUMN, mdata->subtitle,
1565 AUDIO_CODEC_COLUMN, mdata->audio_codec,
1566 VIDEO_CODEC_COLUMN, mdata->video_codec,
1567 LENGTH_COLUMN, mdata->length,
1568 DEMUXER_COLUMN, mdata->demuxer,
1569 LENGTH_VALUE_COLUMN, mdata->length_value,
1570 VIDEO_WIDTH_COLUMN, mdata->width, VIDEO_HEIGHT_COLUMN,
1571 mdata->height, PLAYABLE_COLUMN, mdata->playable, -1);
1572
1573 if (mdata->playable == FALSE) {
1574 gtk_list_store_remove(playliststore, riter);
1575 g_idle_add(set_title_bar, idledata);
1576 }
1577 }
1578 }
1579
1580 g_free(riter);
1581 free_metadata(mdata);
1582
1583 g_mutex_unlock(set_mutex);
1584 return FALSE;
1585 }
1586
set_show_seek_buttons(gpointer data)1587 gboolean set_show_seek_buttons(gpointer data)
1588 {
1589 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SEEKABLE)) {
1590 gtk_widget_show_all(ff_event_box);
1591 gtk_widget_show_all(rew_event_box);
1592 }
1593
1594 return FALSE;
1595 }
1596
cancel_clicked(GtkButton * button,gpointer user_data)1597 void cancel_clicked(GtkButton * button, gpointer user_data)
1598 {
1599 cancel_folder_load = TRUE;
1600 }
1601
create_folder_progress_window()1602 void create_folder_progress_window()
1603 {
1604 GtkWidget *vbox;
1605 GtkWidget *cancel;
1606 GtkWidget *hbox;
1607
1608 cancel_folder_load = FALSE;
1609
1610 folder_progress_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1611 gtk_window_set_type_hint(GTK_WINDOW(folder_progress_window), GDK_WINDOW_TYPE_HINT_UTILITY);
1612 gtk_window_set_transient_for(GTK_WINDOW(folder_progress_window), GTK_WINDOW(window));
1613 gtk_window_set_position(GTK_WINDOW(folder_progress_window), GTK_WIN_POS_CENTER_ON_PARENT);
1614 gtk_window_set_icon(GTK_WINDOW(folder_progress_window), pb_icon);
1615 gtk_window_set_resizable(GTK_WINDOW(folder_progress_window), FALSE);
1616 gtk_widget_set_size_request(folder_progress_window, 400, -1);
1617
1618 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
1619 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
1620 gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE);
1621 #else
1622 vbox = gtk_vbox_new(FALSE, 10);
1623 #endif
1624 folder_progress_bar = gtk_progress_bar_new();
1625 gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(folder_progress_bar), 0.10);
1626 folder_progress_label = gtk_label_new("");
1627 gtk_label_set_ellipsize(GTK_LABEL(folder_progress_label), PANGO_ELLIPSIZE_MIDDLE);
1628
1629 cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
1630 g_signal_connect(G_OBJECT(cancel), "clicked", G_CALLBACK(cancel_clicked), NULL);
1631 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
1632 hbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
1633 #else
1634 hbox = gtk_hbutton_box_new();
1635 #endif
1636 gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);
1637 gtk_container_add(GTK_CONTAINER(hbox), cancel);
1638
1639 gtk_container_add(GTK_CONTAINER(vbox), folder_progress_bar);
1640 gtk_container_add(GTK_CONTAINER(vbox), folder_progress_label);
1641 gtk_container_add(GTK_CONTAINER(vbox), hbox);
1642 gtk_container_add(GTK_CONTAINER(folder_progress_window), vbox);
1643
1644 gtk_widget_show_all(folder_progress_window);
1645 gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
1646 while (gtk_events_pending())
1647 gtk_main_iteration();
1648 }
1649
destroy_folder_progress_window()1650 void destroy_folder_progress_window()
1651 {
1652 gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
1653 while (gtk_events_pending())
1654 gtk_main_iteration();
1655 if (GTK_IS_WIDGET(folder_progress_window))
1656 gtk_widget_destroy(folder_progress_window);
1657 folder_progress_window = NULL;
1658 if (cancel_folder_load)
1659 clear_playlist(NULL, NULL);
1660 cancel_folder_load = FALSE;
1661 }
1662
1663
set_item_add_info(void * data)1664 gboolean set_item_add_info(void *data)
1665 {
1666 gchar *message;
1667
1668 if (data == NULL)
1669 return FALSE;
1670
1671 if (GTK_IS_WIDGET(folder_progress_window)) {
1672 message = g_strdup_printf(_("Adding %s to playlist"), (gchar *) data);
1673 gtk_label_set_text(GTK_LABEL(folder_progress_label), message);
1674 gtk_progress_bar_pulse(GTK_PROGRESS_BAR(folder_progress_bar));
1675 g_free(message);
1676 //gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
1677 //while (gtk_events_pending())
1678 // gtk_main_iteration();
1679 }
1680
1681 return FALSE;
1682 }
1683
remove_langs(GtkWidget * item,gpointer data)1684 void remove_langs(GtkWidget * item, gpointer data)
1685 {
1686 if (GTK_IS_WIDGET(item))
1687 gtk_widget_destroy(item);
1688 }
1689
update_status_icon()1690 void update_status_icon()
1691 {
1692 #ifdef GTK2_12_ENABLED
1693 gchar *text;
1694
1695 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY) {
1696 text = g_strdup_printf(_("Playing %s"), idledata->display_name);
1697 } else if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
1698 text = g_strdup_printf(_("Paused %s"), idledata->display_name);
1699 } else {
1700 text = g_strdup_printf(_("Idle"));
1701 }
1702
1703 if (GTK_IS_WIDGET(status_icon)) {
1704 #ifdef GTK2_18_ENABLED
1705 gtk_status_icon_set_tooltip_text(status_icon, text);
1706 #else
1707 gtk_status_icon_set_tooltip(status_icon, text);
1708 #endif
1709 }
1710
1711 g_free(text);
1712 #endif
1713 }
1714
resize_window(void * data)1715 gboolean resize_window(void *data)
1716 {
1717 IdleData *idle = (IdleData *) data;
1718 GTimeVal currenttime;
1719 GValue resize_value = { 0 };
1720 GValue shrink_value = { 0 };
1721
1722 g_value_init(&resize_value, G_TYPE_BOOLEAN);
1723 g_value_init(&shrink_value, G_TYPE_BOOLEAN);
1724
1725 if (GTK_IS_WIDGET(window)) {
1726 if (idle->videopresent) {
1727 g_value_set_boolean(&resize_value, TRUE);
1728 g_value_set_boolean(&shrink_value, TRUE);
1729 gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "resize", &resize_value);
1730 gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "shrink", &shrink_value);
1731 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), FALSE);
1732 g_get_current_time(¤ttime);
1733 last_movement_time = currenttime.tv_sec;
1734 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_info), TRUE);
1735 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_subtitle), TRUE);
1736 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_audiofile), TRUE);
1737 dbus_disable_screensaver();
1738 if (embed_window == -1) {
1739 gtk_widget_show_all(window);
1740 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), FALSE);
1741 hide_buttons(idle);
1742 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols), showcontrols);
1743 }
1744 gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
1745 #ifdef GTK3_ENABLED
1746 gtk_window_set_has_resize_grip(GTK_WINDOW(window), idledata->videopresent);
1747 #endif
1748 gtk_widget_show_all(GTK_WIDGET(media));
1749 gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
1750 while (gtk_events_pending())
1751 gtk_main_iteration();
1752
1753 if (window_x == 0 && window_y == 0) {
1754 gm_log(verbose, G_LOG_LEVEL_INFO, "current size = %i x %i", non_fs_width, non_fs_height);
1755 if (resize_on_new_media == TRUE || gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL)
1756 || idle->streaming) {
1757 if (idle->width > 1 && idle->height > 1) {
1758 gm_log(verbose, G_LOG_LEVEL_INFO, "Changing window size to %i x %i visible = %s", idle->width,
1759 idle->height, gm_bool_to_string(gmtk_get_visible(media)));
1760 last_window_width = idle->width;
1761 last_window_height = idle->height;
1762 non_fs_width = idle->width;
1763 non_fs_height = idle->height;
1764 adjusting = TRUE;
1765 g_idle_add(set_adjust_layout, &adjusting);
1766 }
1767 } else {
1768 gm_log(verbose, G_LOG_LEVEL_INFO, "old aspect is %f new aspect is %f",
1769 (gfloat) non_fs_width / (gfloat) non_fs_height,
1770 (gfloat) (idle->width) / (gfloat) (idle->height));
1771 }
1772 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_fullscreen), fullscreen);
1773 if (init_fullscreen) {
1774 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_fullscreen), init_fullscreen);
1775 init_fullscreen = 0;
1776 }
1777
1778 } else {
1779 if (window_x > 0 && window_y > 0) {
1780 gtk_window_resize(GTK_WINDOW(window), window_x, window_y);
1781 }
1782 }
1783 } else {
1784 // audio only file
1785
1786 g_value_set_boolean(&resize_value, FALSE);
1787 g_value_set_boolean(&shrink_value, FALSE);
1788 gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "resize", &resize_value);
1789 gtk_container_child_set_property(GTK_CONTAINER(pane), vbox, "shrink", &shrink_value);
1790 non_fs_height = 0;
1791 non_fs_width = 0;
1792 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_fullscreen), FALSE);
1793 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), TRUE);
1794 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_info), FALSE);
1795 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_subtitle), FALSE);
1796 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_audiofile), FALSE);
1797 last_window_height = 0;
1798 last_window_width = 0;
1799 g_idle_add(set_adjust_layout, NULL);
1800 if (window_x > 0) {
1801 gtk_widget_set_size_request(media_label, window_x, -1);
1802 } else {
1803 gtk_widget_set_size_request(media_label, 300, -1);
1804 }
1805 // adjust_layout();
1806 }
1807 }
1808 if (idle != NULL)
1809 idle->window_resized = TRUE;
1810
1811 return FALSE;
1812 }
1813
set_play(void * data)1814 gboolean set_play(void *data)
1815 {
1816 if (embed_window == 0 && bring_to_front)
1817 gtk_window_present(GTK_WINDOW(window));
1818
1819 play_callback(NULL, NULL, data);
1820 return FALSE;
1821 }
1822
set_pause(void * data)1823 gboolean set_pause(void *data)
1824 {
1825
1826 pause_callback(NULL, NULL, data);
1827 return FALSE;
1828 }
1829
set_stop(void * data)1830 gboolean set_stop(void *data)
1831 {
1832
1833 stop_callback(NULL, NULL, data);
1834 return FALSE;
1835 }
1836
set_ff(void * data)1837 gboolean set_ff(void *data)
1838 {
1839
1840 ff_callback(NULL, NULL, NULL); // ok is just not NULL which is what we want
1841 return FALSE;
1842 }
1843
set_rew(void * data)1844 gboolean set_rew(void *data)
1845 {
1846
1847 rew_callback(NULL, NULL, NULL); // ok is just not NULL which is what we want
1848 return FALSE;
1849 }
1850
set_prev(void * data)1851 gboolean set_prev(void *data)
1852 {
1853
1854 prev_callback(NULL, NULL, NULL);
1855 return FALSE;
1856 }
1857
set_next(void * data)1858 gboolean set_next(void *data)
1859 {
1860
1861 next_callback(NULL, NULL, NULL);
1862 return FALSE;
1863 }
1864
set_quit(void * data)1865 gboolean set_quit(void *data)
1866 {
1867
1868 delete_callback(NULL, NULL, NULL);
1869 g_idle_add(set_destroy, NULL);
1870 return FALSE;
1871 }
1872
set_kill_mplayer(void * data)1873 gboolean set_kill_mplayer(void *data)
1874 {
1875 gm_log(GMTK_MEDIA_PLAYER(media)->debug, G_LOG_LEVEL_DEBUG, "set_kill_mplayer()");
1876 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
1877
1878 return FALSE;
1879 }
1880
set_pane_position(void * data)1881 gboolean set_pane_position(void *data)
1882 {
1883 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist))) {
1884 gtk_paned_set_position(GTK_PANED(pane), loc_panel_position);
1885 }
1886 return FALSE;
1887 }
1888
set_position(void * data)1889 gboolean set_position(void *data)
1890 {
1891 IdleData *idle = (IdleData *) data;
1892
1893 if (idle != NULL) {
1894 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), idle->position, SEEK_ABSOLUTE);
1895 }
1896 return FALSE;
1897 }
1898
set_raise_window(void * data)1899 gboolean set_raise_window(void *data)
1900 {
1901 gtk_window_present(GTK_WINDOW(window));
1902 gdk_window_raise(gmtk_get_window(window));
1903 return FALSE;
1904 }
1905
set_software_volume(gdouble * data)1906 gboolean set_software_volume(gdouble * data)
1907 {
1908 gm_store = gm_pref_store_new("gnome-mplayer");
1909 gm_pref_store_set_float(gm_store, VOLUME_SOFTVOL, *data);
1910 gm_pref_store_free(gm_store);
1911 return FALSE;
1912 }
1913
hookup_volume(void * data)1914 gboolean hookup_volume(void *data)
1915 {
1916 gm_log(verbose, G_LOG_LEVEL_DEBUG, "hookup_volume is %f", audio_device.volume);
1917 if (softvol == FALSE) {
1918 if (gm_audio_update_device(&audio_device)) {
1919 if (softvol || audio_device.type == AUDIO_TYPE_SOFTVOL) {
1920 gm_audio_set_server_volume_update_callback(&audio_device, NULL);
1921 } else {
1922 gm_audio_set_server_volume_update_callback(&audio_device, set_volume);
1923 }
1924 }
1925 }
1926 gm_log(verbose, G_LOG_LEVEL_DEBUG, "out hookup_volume is %f", audio_device.volume);
1927 return FALSE;
1928 }
1929
1930
set_volume(void * data)1931 gboolean set_volume(void *data)
1932 {
1933 IdleData *idle = (IdleData *) data;
1934 gchar *buf = NULL;
1935
1936 gm_log(verbose, G_LOG_LEVEL_DEBUG, "set_volume new volume is %f", audio_device.volume);
1937 if (data == NULL) {
1938 gm_log(verbose, G_LOG_LEVEL_DEBUG, "in set_volume without data");
1939 if (!(softvol || audio_device.type == AUDIO_TYPE_SOFTVOL)) {
1940 gm_audio_get_volume(&audio_device);
1941 }
1942 if (pref_volume != -1) {
1943 audio_device.volume = (gdouble) pref_volume / 100.0;
1944 gmtk_media_player_set_volume(GMTK_MEDIA_PLAYER(media), audio_device.volume);
1945 pref_volume = -1;
1946 }
1947 gm_log(verbose, G_LOG_LEVEL_DEBUG, "data is null new volume is %f", audio_device.volume);
1948 #ifdef GTK2_12_ENABLED
1949 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), audio_device.volume);
1950 #else
1951 gtk_range_set_value(GTK_RANGE(vol_slider), audio_device.volume);
1952 #endif
1953 return FALSE;
1954 }
1955
1956 if (GTK_IS_WIDGET(vol_slider) && audio_device.volume >= 0.0 && audio_device.volume <= 1.0) {
1957 gm_log(verbose, G_LOG_LEVEL_DEBUG, "setting slider to %f", audio_device.volume);
1958 if (remember_softvol) {
1959 volume_softvol = audio_device.volume;
1960 set_software_volume(&volume_softvol);
1961 }
1962 #ifdef GTK2_12_ENABLED
1963 if (rpcontrols != NULL && g_ascii_strcasecmp(rpcontrols, "volumeslider") == 0) {
1964 gtk_range_set_value(GTK_RANGE(vol_slider), audio_device.volume);
1965 buf = g_strdup_printf(_("Volume %i%%"), (gint) (audio_device.volume * 100.0));
1966 g_strlcpy(idledata->vol_tooltip, buf, sizeof(idledata->vol_tooltip));
1967 g_free(buf);
1968 } else {
1969 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), audio_device.volume);
1970 }
1971
1972 #else
1973 gtk_range_set_value(GTK_RANGE(vol_slider), audio_device.volume);
1974 buf = g_strdup_printf(_("Volume %i%%"), (gint) (audio_device.volume * 100.0));
1975 g_strlcpy(idledata->vol_tooltip, buf, sizeof(idledata->vol_tooltip));
1976 g_free(buf);
1977 #endif
1978 g_idle_add(set_volume_tip, idle);
1979 }
1980
1981 return FALSE;
1982 }
1983
set_fullscreen(void * data)1984 gboolean set_fullscreen(void *data)
1985 {
1986
1987 IdleData *idle = (IdleData *) data;
1988
1989 // we need to flip the state since the callback reads the value of fullscreen
1990 // and if fullscreen is 0 it sets it to fullscreen.
1991 // fullscreen = ! (gint) idle->fullscreen;
1992 // printf("calling fs_callback with %s\n",gm_bool_to_string(fullscreen));
1993 // fs_callback(NULL, NULL, NULL); // ok is just not NULL which is what we want
1994 if (idle != NULL && idle->videopresent)
1995 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), idle->fullscreen);
1996 return FALSE;
1997 }
1998
set_show_controls(void * data)1999 gboolean set_show_controls(void *data)
2000 {
2001
2002 IdleData *idle = (IdleData *) data;
2003
2004 if (idle == NULL)
2005 return FALSE;
2006
2007 showcontrols = idle->showcontrols;
2008
2009 if (gmtk_get_visible(GTK_WIDGET(menuitem_view_controls))) {
2010 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_controls), showcontrols);
2011 } else {
2012 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols), showcontrols);
2013 }
2014 return FALSE;
2015 }
2016
get_show_controls()2017 gboolean get_show_controls()
2018 {
2019 return gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_controls));
2020 }
2021
popup_handler(GtkWidget * widget,GdkEvent * event,void * data)2022 gboolean popup_handler(GtkWidget * widget, GdkEvent * event, void *data)
2023 {
2024 GtkMenu *menu;
2025 GdkEventButton *event_button;
2026 GTimeVal currenttime;
2027 GtkAllocation alloc;
2028
2029 g_get_current_time(¤ttime);
2030 last_movement_time = currenttime.tv_sec;
2031 g_idle_add(make_panel_and_mouse_visible, NULL);
2032
2033 menu = GTK_MENU(widget);
2034 gtk_widget_grab_focus(media);
2035 if (event->type == GDK_BUTTON_PRESS) {
2036
2037 event_button = (GdkEventButton *) event;
2038
2039 dbus_send_event("MouseDown", event_button->button);
2040 dbus_send_event("MouseClicked", 0);
2041
2042 if (event_button->button == 3 && disable_context_menu == 0) {
2043 gtk_menu_popup(menu, NULL, NULL, NULL, NULL, event_button->button, event_button->time);
2044 return TRUE;
2045 }
2046
2047 if (event_button->button == 2) {
2048
2049 // mute on button 2
2050 #ifdef GTK2_12_ENABLED
2051 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED)) {
2052 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), audio_device.volume);
2053 } else {
2054 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), 0.0);
2055 }
2056 #else
2057 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED)) {
2058 gtk_range_set_value(GTK_RANGE(vol_slider), audio_device.volume);
2059 } else {
2060 gtk_range_set_value(GTK_RANGE(vol_slider), 0.0);
2061 }
2062 #endif
2063 }
2064
2065 if (event_button->button == 1 && idledata->videopresent == TRUE && !disable_pause_on_click &&
2066 !gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE_IS_MENU)) {
2067
2068 switch (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media))) {
2069 case MEDIA_STATE_PLAY:
2070 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PAUSE);
2071 break;
2072 case MEDIA_STATE_PAUSE:
2073 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PLAY);
2074 break;
2075 default:
2076 break;
2077 }
2078 }
2079
2080 }
2081 // fullscreen on double click of button 1
2082 if (event->type == GDK_2BUTTON_PRESS) {
2083 event_button = (GdkEventButton *) event;
2084 if (event_button->button == 1 && idledata->videopresent == TRUE) {
2085 gmtk_get_allocation(media, &alloc);
2086 if (event_button->x > alloc.x
2087 && event_button->y > alloc.y
2088 && event_button->x < alloc.x + alloc.width && event_button->y < alloc.y + alloc.height) {
2089 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), !fullscreen);
2090
2091 }
2092 }
2093 }
2094
2095 if (event->type == GDK_BUTTON_RELEASE) {
2096
2097 event_button = (GdkEventButton *) event;
2098 dbus_send_event("MouseUp", event_button->button);
2099
2100 }
2101
2102 return FALSE;
2103 }
2104
media_scroll_event_callback(GtkWidget * widget,GdkEventScroll * event,gpointer data)2105 gboolean media_scroll_event_callback(GtkWidget * widget, GdkEventScroll * event, gpointer data)
2106 {
2107
2108 if (mouse_wheel_changes_volume == FALSE) {
2109 if (event->direction == GDK_SCROLL_UP) {
2110 set_ff(NULL);
2111 }
2112
2113 if (event->direction == GDK_SCROLL_DOWN) {
2114 set_rew(NULL);
2115 }
2116 } else {
2117 if (event->direction == GDK_SCROLL_UP) {
2118 audio_device.volume += 0.01;
2119 g_idle_add(set_volume, idledata);
2120 }
2121
2122 if (event->direction == GDK_SCROLL_DOWN) {
2123 audio_device.volume -= 0.01;
2124 g_idle_add(set_volume, idledata);
2125 }
2126 }
2127
2128 return TRUE;
2129 }
2130
notification_handler(GtkWidget * widget,GdkEventCrossing * event,void * data)2131 gboolean notification_handler(GtkWidget * widget, GdkEventCrossing * event, void *data)
2132 {
2133 if (event->type == GDK_ENTER_NOTIFY) {
2134 dbus_send_event("EnterWindow", 0);
2135 }
2136
2137 if (event->type == GDK_LEAVE_NOTIFY) {
2138 dbus_send_event("LeaveWindow", 0);
2139 }
2140
2141 return FALSE;
2142 }
2143
set_destroy(gpointer data)2144 gboolean set_destroy(gpointer data)
2145 {
2146 gtk_widget_destroy(window);
2147 return FALSE;
2148 }
2149
2150
destroy_callback(GtkWidget * widget,gpointer data)2151 static void destroy_callback(GtkWidget * widget, gpointer data)
2152 {
2153 gtk_main_quit();
2154 }
2155
delete_callback(GtkWidget * widget,GdkEvent * event,void * data)2156 gboolean delete_callback(GtkWidget * widget, GdkEvent * event, void *data)
2157 {
2158 loop = 0;
2159 ok_to_play = FALSE;
2160 dontplaynext = TRUE;
2161
2162 gm_log(GMTK_MEDIA_PLAYER(media)->debug, G_LOG_LEVEL_DEBUG, "delete_callback()");
2163
2164 g_idle_remove_by_data(idledata);
2165 gm_audio_set_server_volume_update_callback(&audio_device, NULL);
2166
2167 if (remember_loc && !fullscreen && embed_window == 0) {
2168 gm_store = gm_pref_store_new("gnome-mplayer");
2169 gtk_window_get_position(GTK_WINDOW(window), &loc_window_x, &loc_window_y);
2170 gtk_window_get_size(GTK_WINDOW(window), &loc_window_width, &loc_window_height);
2171 loc_panel_position = gtk_paned_get_position(GTK_PANED(pane));
2172
2173 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist))) {
2174
2175 }
2176 //if (save_loc) {
2177 gm_pref_store_set_int(gm_store, WINDOW_X, loc_window_x);
2178 gm_pref_store_set_int(gm_store, WINDOW_Y, loc_window_y);
2179 gm_pref_store_set_int(gm_store, WINDOW_HEIGHT, loc_window_height);
2180 gm_pref_store_set_int(gm_store, WINDOW_WIDTH, loc_window_width);
2181 gm_pref_store_set_int(gm_store, PANEL_POSITION, loc_panel_position);
2182 //}
2183 gm_pref_store_free(gm_store);
2184 }
2185 #ifdef LIBGDA_ENABLED
2186 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY
2187 || gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2188
2189 mark_uri_in_db_as_resumable(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), TRUE,
2190 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
2191 ATTRIBUTE_POSITION));
2192 } else {
2193
2194 if (gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)) != NULL) {
2195 mark_uri_in_db_as_resumable(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), FALSE, 0.0);
2196 }
2197 }
2198 #endif
2199
2200 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
2201 gm_log(verbose, G_LOG_LEVEL_DEBUG,
2202 "waiting for all events to drain and state to become \"unknown\" and the mplayer thread to exit");
2203 while (gtk_events_pending() || gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN
2204 || GMTK_MEDIA_PLAYER(media)->mplayer_thread != NULL) {
2205 gtk_main_iteration();
2206 }
2207
2208 if (control_id == 0) {
2209 g_thread_pool_stop_unused_threads();
2210 if (retrieve_metadata_pool != NULL) {
2211 gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain and retrieve_metadata_pool to empty");
2212 while (gtk_events_pending() || g_thread_pool_unprocessed(retrieve_metadata_pool)) {
2213 gtk_main_iteration();
2214 }
2215 g_thread_pool_free(retrieve_metadata_pool, TRUE, TRUE);
2216 }
2217 } else {
2218 gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
2219 while (gtk_events_pending()) {
2220 gtk_main_iteration();
2221 }
2222 dbus_cancel();
2223 }
2224 dbus_enable_screensaver();
2225 dbus_unhook();
2226
2227 if (use_defaultpl && embed_window == 0)
2228 save_playlist_pls(default_playlist);
2229
2230 #ifdef LIBGDA_ENABLED
2231 close_db_connection(db_connection);
2232 #endif
2233
2234 //gtk_main_quit();
2235 return FALSE;
2236 }
2237
2238 #ifdef GTK2_12_ENABLED
status_icon_callback(GtkStatusIcon * icon,gpointer data)2239 gboolean status_icon_callback(GtkStatusIcon * icon, gpointer data)
2240 {
2241
2242 if (gmtk_get_visible(window)) {
2243 gtk_window_get_position(GTK_WINDOW(window), &loc_window_x, &loc_window_y);
2244 gtk_window_iconify(GTK_WINDOW(window));
2245 gtk_widget_hide(GTK_WIDGET(window));
2246 } else {
2247 gtk_window_deiconify(GTK_WINDOW(window));
2248 gtk_window_present(GTK_WINDOW(window));
2249 gtk_window_move(GTK_WINDOW(window), loc_window_x, loc_window_y);
2250 }
2251 return FALSE;
2252 }
2253
2254
status_icon_context_callback(GtkStatusIcon * status_icon,guint button,guint activate_time,gpointer data)2255 void status_icon_context_callback(GtkStatusIcon * status_icon, guint button, guint activate_time, gpointer data)
2256 {
2257 gtk_menu_popup(GTK_MENU(popup_menu), NULL, NULL, gtk_status_icon_position_menu, status_icon, button, activate_time);
2258 }
2259
2260 #endif
2261
motion_notify_callback(GtkWidget * widget,GdkEventMotion * event,gpointer data)2262 gboolean motion_notify_callback(GtkWidget * widget, GdkEventMotion * event, gpointer data)
2263 {
2264 GTimeVal currenttime;
2265 GtkAllocation fs_allocation;
2266 GtkAllocation fs_controls_allocation;
2267
2268 g_get_current_time(¤ttime);
2269 last_movement_time = currenttime.tv_sec;
2270 /*
2271 if (verbose > 1) {
2272 g_get_current_time(¤ttime);
2273 printf("motion noticed at %li\n",currenttime.tv_sec);
2274 }
2275 */
2276 if (fullscreen) {
2277 gmtk_get_allocation(window, &fs_allocation);
2278 gmtk_get_allocation(controls_box, &fs_controls_allocation);
2279 if (event->y > (fs_allocation.height - fs_controls_allocation.height)) {
2280 g_idle_add(make_panel_and_mouse_visible, NULL);
2281 } else {
2282 hide_fs_controls();
2283 }
2284 } else {
2285 g_idle_add(make_panel_and_mouse_visible, NULL);
2286 }
2287 return FALSE;
2288 }
2289
window_state_callback(GtkWidget * widget,GdkEventWindowState * event,gpointer user_data)2290 gboolean window_state_callback(GtkWidget * widget, GdkEventWindowState * event, gpointer user_data)
2291 {
2292 gm_log(verbose, G_LOG_LEVEL_DEBUG, "fullscreen = %s",
2293 gm_bool_to_string((event->new_window_state == GDK_WINDOW_STATE_FULLSCREEN)));
2294 gm_log(verbose, G_LOG_LEVEL_DEBUG, "State = %i mask = %i flag = %i", event->new_window_state, event->changed_mask,
2295 GDK_WINDOW_STATE_FULLSCREEN);
2296 //if (embed_window == 0) {
2297 //update_control_flag = TRUE;
2298 gm_log(verbose, G_LOG_LEVEL_DEBUG, "restore controls = %s showcontrols = %s", gm_bool_to_string(restore_controls),
2299 gm_bool_to_string(showcontrols));
2300 if (fullscreen == 1 && (event->new_window_state & GDK_WINDOW_STATE_ICONIFIED)) {
2301 // fullscreen, but window hidden
2302 hide_fs_controls();
2303 }
2304
2305 if (fullscreen == 1 && (event->new_window_state == GDK_WINDOW_STATE_FULLSCREEN)) {
2306 if (showcontrols) {
2307 show_fs_controls();
2308 }
2309 }
2310
2311 return FALSE;
2312
2313 fullscreen = (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN);
2314 if (fullscreen) {
2315 gtk_widget_hide(menubar);
2316 } else {
2317 gtk_widget_show(menubar);
2318 }
2319 if (event->changed_mask == GDK_WINDOW_STATE_FULLSCREEN) {
2320 idledata->showcontrols = restore_controls;
2321 set_show_controls(idledata);
2322 }
2323 //}
2324
2325 return FALSE;
2326 }
2327
configure_callback(GtkWidget * widget,GdkEventConfigure * event,gpointer user_data)2328 gboolean configure_callback(GtkWidget * widget, GdkEventConfigure * event, gpointer user_data)
2329 {
2330 if (use_remember_loc && event->width == loc_window_width && event->height == loc_window_height) {
2331 // this might be useful
2332 }
2333 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_subtitles),
2334 gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media),
2335 ATTRIBUTE_SUB_VISIBLE));
2336 return FALSE;
2337 }
2338
window_key_callback(GtkWidget * widget,GdkEventKey * event,gpointer user_data)2339 gboolean window_key_callback(GtkWidget * widget, GdkEventKey * event, gpointer user_data)
2340 {
2341 GTimeVal currenttime;
2342 gboolean title_is_menu;
2343 gint index;
2344
2345 gm_log(verbose, G_LOG_LEVEL_DEBUG, "key = %i", event->keyval);
2346 gm_log(verbose, G_LOG_LEVEL_DEBUG, "state = %i", event->state);
2347 gm_log(verbose, G_LOG_LEVEL_DEBUG, "other = %i", event->state & ~GDK_CONTROL_MASK);
2348
2349 gm_log(verbose, G_LOG_LEVEL_DEBUG, "key name=%s", gdk_keyval_name(event->keyval));
2350 // We don't want to handle CTRL accelerators here
2351 // if we pass in items with CTRL then 2 and Ctrl-2 do the same thing
2352 if (gmtk_get_visible(plvbox) && gtk_tree_view_get_enable_search(GTK_TREE_VIEW(list)))
2353 return FALSE;
2354
2355 index = get_index_from_key_and_modifier(event->keyval, event->state);
2356 gm_log(verbose, G_LOG_LEVEL_DEBUG, "index = %i", index);
2357 if (!event->is_modifier && index != -1) {
2358
2359 switch (index) {
2360 case FILE_OPEN_LOCATION:
2361 break;
2362 case EDIT_SCREENSHOT:
2363 if (fullscreen)
2364 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_TAKE_SCREENSHOT);
2365 return FALSE;
2366 case EDIT_PREFERENCES:
2367 break;
2368 case VIEW_PLAYLIST:
2369 break;
2370 case VIEW_INFO:
2371 break;
2372 case VIEW_DETAILS:
2373 break;
2374 case VIEW_METER:
2375 break;
2376 case VIEW_FULLSCREEN:
2377 if (fullscreen) {
2378 if (idledata->videopresent) {
2379 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), FALSE);
2380 }
2381 } else {
2382 if (idledata->videopresent) {
2383 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), TRUE);
2384 }
2385 }
2386 return TRUE;
2387 case VIEW_ASPECT:
2388 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window))) {
2389 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), TRUE);
2390 return FALSE;
2391 }
2392 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten))) {
2393 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_anamorphic), TRUE);
2394 return FALSE;
2395 }
2396 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine))) {
2397 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten), TRUE);
2398 return FALSE;
2399 }
2400 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three))) {
2401 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine), TRUE);
2402 return FALSE;
2403 }
2404 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_anamorphic))) {
2405 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window), TRUE);
2406 return FALSE;
2407 }
2408 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default)))
2409 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three), TRUE);
2410 return FALSE;
2411 case VIEW_SUBTITLES:
2412 if (fullscreen) {
2413 if (idledata->videopresent)
2414 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE,
2415 !gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER
2416 (media),
2417 ATTRIBUTE_SUB_VISIBLE));
2418 }
2419 return FALSE;
2420 case VIEW_DECREASE_SIZE:
2421 case VIEW_INCREASE_SIZE:
2422 case VIEW_ANGLE:
2423 case VIEW_CONTROLS:
2424 break;
2425 default:
2426 gm_log(verbose, G_LOG_LEVEL_MESSAGE, "Keyboard shortcut index %i, not handled in fullscreen at this time",
2427 index);
2428
2429 }
2430 }
2431
2432 if (!event->is_modifier && (event->state & GDK_SHIFT_MASK) == 0 && (event->state & GDK_CONTROL_MASK) == 0
2433 && (event->state & GDK_MOD1_MASK) == 0) {
2434
2435 g_get_current_time(¤ttime);
2436 last_movement_time = currenttime.tv_sec;
2437
2438 title_is_menu = gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE_IS_MENU);
2439
2440 g_idle_add(make_panel_and_mouse_visible, NULL);
2441 switch (event->keyval) {
2442 case GDK_ISO_Next_Group:
2443 setup_accelerators();
2444 return FALSE;
2445 case GDK_Right:
2446 if (title_is_menu) {
2447 return gmtk_media_player_send_key_press_event(GMTK_MEDIA_PLAYER(media), event, data);
2448 } else {
2449 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP
2450 && !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist)))
2451 return ff_callback(NULL, NULL, NULL);
2452 }
2453 break;
2454 case GDK_Left:
2455 if (title_is_menu) {
2456 return gmtk_media_player_send_key_press_event(GMTK_MEDIA_PLAYER(media), event, data);
2457 } else {
2458 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP
2459 && !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist)))
2460 return rew_callback(NULL, NULL, NULL);
2461 }
2462 break;
2463 case GDK_Page_Up:
2464 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP
2465 && !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist)))
2466 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 600.0, SEEK_RELATIVE);
2467
2468 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2469 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 0.0, SEEK_RELATIVE);
2470 idledata->position += 600;
2471 if (idledata->position > idledata->length)
2472 idledata->position = 0;
2473 gmtk_media_tracker_set_percentage(tracker, idledata->position / idledata->length);
2474 }
2475 return FALSE;
2476 case GDK_Page_Down:
2477 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP
2478 && !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist)))
2479 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), -600.0, SEEK_RELATIVE);
2480 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2481 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 0.0, SEEK_RELATIVE);
2482 idledata->position -= 600;
2483 if (idledata->position < 0)
2484 idledata->position = 0;
2485 gmtk_media_tracker_set_percentage(tracker, idledata->position / idledata->length);
2486 }
2487 return FALSE;
2488 case GDK_Up:
2489 if (title_is_menu) {
2490 return gmtk_media_player_send_key_press_event(GMTK_MEDIA_PLAYER(media), event, data);
2491 } else {
2492 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP
2493 && !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist)))
2494 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 60.0, SEEK_RELATIVE);
2495 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2496 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 0.0, SEEK_RELATIVE);
2497 idledata->position += 60;
2498 if (idledata->position > idledata->length)
2499 idledata->position = 0;
2500 gmtk_media_tracker_set_percentage(tracker, idledata->position / idledata->length);
2501 }
2502 }
2503
2504 return FALSE;
2505 case GDK_Down:
2506 if (title_is_menu) {
2507 return gmtk_media_player_send_key_press_event(GMTK_MEDIA_PLAYER(media), event, data);
2508 } else {
2509 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP
2510 && !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist)))
2511 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), -60.0, SEEK_RELATIVE);
2512 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2513 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 0.0, SEEK_RELATIVE);
2514 idledata->position -= 60;
2515 if (idledata->position < 0)
2516 idledata->position = 0;
2517 gmtk_media_tracker_set_percentage(tracker, idledata->position / idledata->length);
2518 }
2519 }
2520 return FALSE;
2521 case GDK_Return:
2522 case GDK_KP_Enter:
2523 if (title_is_menu) {
2524 return gmtk_media_player_send_key_press_event(GMTK_MEDIA_PLAYER(media), event, data);
2525 } else if (idledata->videopresent) {
2526 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), !fullscreen);
2527 }
2528 return FALSE;
2529 case GDK_less:
2530 prev_callback(NULL, NULL, NULL);
2531 return FALSE;
2532 case GDK_greater:
2533 next_callback(NULL, NULL, NULL);
2534 return FALSE;
2535 case GDK_space:
2536 case GDK_p:
2537 return play_callback(NULL, NULL, NULL);
2538 break;
2539 case GDK_m:
2540 #ifdef GTK2_12_ENABLED
2541 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED)) {
2542 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, FALSE);
2543 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), audio_device.volume);
2544 } else {
2545 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, TRUE);
2546 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), 0.0);
2547 }
2548 #else
2549 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED)) {
2550 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, FALSE);
2551 gtk_range_set_value(GTK_RANGE(vol_slider), audio_device.volume);
2552 } else {
2553 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, TRUE);
2554 gtk_range_set_value(GTK_RANGE(vol_slider), 0.0);
2555 }
2556 #endif
2557 return FALSE;
2558
2559 case GDK_1:
2560 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_CONTRAST, -5);
2561 return FALSE;
2562 case GDK_2:
2563 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_CONTRAST, 5);
2564 return FALSE;
2565 case GDK_3:
2566 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_BRIGHTNESS, -5);
2567 return FALSE;
2568 case GDK_4:
2569 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_BRIGHTNESS, 5);
2570 return FALSE;
2571 case GDK_5:
2572 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HUE, -5);
2573 return FALSE;
2574 case GDK_6:
2575 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HUE, 5);
2576 return FALSE;
2577 case GDK_7:
2578 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SATURATION, -5);
2579 return FALSE;
2580 case GDK_8:
2581 gmtk_media_player_set_attribute_integer_delta(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SATURATION, 5);
2582 return FALSE;
2583 case GDK_bracketleft:
2584 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SPEED_MULTIPLIER, 0.9091);
2585 return FALSE;
2586 case GDK_bracketright:
2587 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SPEED_MULTIPLIER, 1.10);
2588 return FALSE;
2589 case GDK_BackSpace:
2590 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SPEED_SET, 1.0);
2591 return FALSE;
2592 case GDK_9:
2593 #ifdef GTK2_12_ENABLED
2594 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider),
2595 gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider)) - 0.01);
2596 #else
2597 gtk_range_set_value(GTK_RANGE(vol_slider), gtk_range_get_value(GTK_RANGE(vol_slider)) - 0.01);
2598 #endif
2599 return FALSE;
2600 case GDK_0:
2601 #ifdef GTK2_12_ENABLED
2602 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider),
2603 gtk_scale_button_get_value(GTK_SCALE_BUTTON(vol_slider)) + 0.01);
2604 #else
2605 gtk_range_set_value(GTK_RANGE(vol_slider), gtk_range_get_value(GTK_RANGE(vol_slider)) + 0.01);
2606 #endif
2607 return FALSE;
2608 case GDK_period:
2609 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE)
2610 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_FRAME_STEP);
2611 return FALSE;
2612 case GDK_j:
2613 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SUBTITLE_SELECT);
2614 return FALSE;
2615 case GDK_y:
2616 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SUBTITLE_STEP_FORWARD);
2617 return FALSE;
2618 case GDK_g:
2619 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SUBTITLE_STEP_BACKWARD);
2620 return FALSE;
2621 case GDK_q:
2622 delete_callback(NULL, NULL, NULL);
2623 g_idle_add(set_destroy, NULL);
2624 return FALSE;
2625 case GDK_v:
2626 /*
2627 if (fullscreen) {
2628 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE,
2629 !gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER
2630 (media),
2631 ATTRIBUTE_SUB_VISIBLE));
2632 }
2633 */
2634 return FALSE;
2635 case GDK_KP_Add:
2636 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_DELAY,
2637 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
2638 ATTRIBUTE_AUDIO_DELAY) + 0.1);
2639
2640 return FALSE;
2641 case GDK_minus:
2642 case GDK_KP_Subtract:
2643 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_DELAY,
2644 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
2645 ATTRIBUTE_AUDIO_DELAY) - 0.1);
2646 return FALSE;
2647 //case GDK_z:
2648 // menuitem_view_decrease_subtitle_delay_callback(NULL, NULL);
2649 // return FALSE;
2650 //case GDK_x:
2651 // menuitem_view_increase_subtitle_delay_callback(NULL, NULL);
2652 // return FALSE;
2653 case GDK_F11:
2654 if (idledata->videopresent)
2655 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), !fullscreen);
2656 return FALSE;
2657 case GDK_Escape:
2658 if (fullscreen) {
2659 if (idledata->videopresent)
2660 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), !fullscreen);
2661 } else {
2662 delete_callback(NULL, NULL, NULL);
2663 g_idle_add(set_destroy, NULL);
2664 }
2665 return FALSE;
2666 case GDK_f:
2667 if (idledata->videopresent)
2668 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), !fullscreen);
2669 return FALSE;
2670 case GDK_a:
2671 /*
2672 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window))) {
2673 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), TRUE);
2674 return FALSE;
2675 }
2676 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten)))
2677 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window), TRUE);
2678 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine)))
2679 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten), TRUE);
2680 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three)))
2681 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine), TRUE);
2682 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default)))
2683 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three), TRUE);
2684 */
2685 return FALSE;
2686 case GDK_d:
2687 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SWITCH_FRAME_DROP);
2688 return FALSE;
2689 case GDK_i:
2690 if (fullscreen) {
2691 //cmd = g_strdup_printf("osd_show_text '%s' 1500 0\n", idledata->display_name);
2692 //send_command(cmd, TRUE);
2693 //g_free(cmd);
2694 }
2695 return FALSE;
2696 case GDK_b:
2697 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_POSITION,
2698 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media),
2699 ATTRIBUTE_SUBTITLE_POSITION)
2700 - 1);
2701 return FALSE;
2702 case GDK_s:
2703 // gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_TAKE_SCREENSHOT);
2704 return FALSE;
2705 default:
2706 gmtk_media_player_send_key_press_event(GMTK_MEDIA_PLAYER(media), event, data);
2707 return FALSE;
2708 }
2709 }
2710
2711 if (!event->is_modifier && (event->state & GDK_SHIFT_MASK) == 1 && (event->state & GDK_CONTROL_MASK) == 0
2712 && (event->state & GDK_MOD1_MASK) == 0) {
2713 g_get_current_time(¤ttime);
2714 last_movement_time = currenttime.tv_sec;
2715
2716 title_is_menu = gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE_IS_MENU);
2717
2718 g_idle_add(make_panel_and_mouse_visible, NULL);
2719 switch (event->keyval) {
2720 case GDK_B:
2721 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_POSITION,
2722 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media),
2723 ATTRIBUTE_SUBTITLE_POSITION)
2724 + 1);
2725 return FALSE;
2726 case GDK_S:
2727 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_TAKE_SCREENSHOT);
2728 return FALSE;
2729 case GDK_J:
2730 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SUBTITLE_SELECT);
2731 return FALSE;
2732 case GDK_numbersign:
2733 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SWITCH_AUDIO);
2734 return FALSE;
2735 case GDK_plus:
2736 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_DELAY,
2737 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
2738 ATTRIBUTE_AUDIO_DELAY) + 0.1);
2739
2740 return FALSE;
2741 case GDK_braceleft:
2742 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SPEED_MULTIPLIER, 0.50);
2743 return FALSE;
2744 case GDK_braceright:
2745 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SPEED_MULTIPLIER, 2.0);
2746 return FALSE;
2747 default:
2748 gmtk_media_player_send_key_press_event(GMTK_MEDIA_PLAYER(media), event, data);
2749 return FALSE;
2750 }
2751
2752 }
2753
2754 if ((fullscreen == 1)
2755 && (!event->is_modifier && (event->state & GDK_SHIFT_MASK) == 0 && (event->state & GDK_CONTROL_MASK) == 0
2756 && (event->state & GDK_MOD1_MASK) == 0)) {
2757 switch (event->keyval) {
2758 case GDK_f:
2759 idledata->fullscreen = FALSE;
2760 set_fullscreen(idledata);
2761 return TRUE;
2762 default:
2763 return FALSE;
2764 }
2765 }
2766
2767 return FALSE;
2768
2769 }
2770
drop_callback(GtkWidget * widget,GdkDragContext * dc,gint x,gint y,GtkSelectionData * selection_data,guint info,guint t,gpointer data)2771 gboolean drop_callback(GtkWidget * widget, GdkDragContext * dc,
2772 gint x, gint y, GtkSelectionData * selection_data, guint info, guint t, gpointer data)
2773 {
2774 gchar **list;
2775 gint i = 0;
2776 gboolean playlist;
2777 gint itemcount;
2778 gboolean added_single = FALSE;
2779 gchar *filename;
2780 /* Important, check if we actually got data. Sometimes errors
2781 * occure and selection_data will be NULL.
2782 */
2783 if (selection_data == NULL)
2784 return FALSE;
2785 #ifdef GTK2_14_ENABLED
2786 if (gtk_selection_data_get_length(selection_data) < 0)
2787 return FALSE;
2788 #else
2789 if (selection_data->length < 0)
2790 return FALSE;
2791 #endif
2792
2793 if ((info == DRAG_INFO_0) || (info == DRAG_INFO_1) || (info == DRAG_INFO_2)) {
2794 #ifdef GTK2_14_ENABLED
2795 list = g_uri_list_extract_uris((const gchar *) gtk_selection_data_get_data(selection_data));
2796 #else
2797 list = g_uri_list_extract_uris((const gchar *) selection_data->data);
2798 #endif
2799 itemcount = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL);
2800
2801 while (list[i] != NULL) {
2802 if (strlen(list[i]) > 0) {
2803 if (is_uri_dir(list[i])) {
2804 create_folder_progress_window();
2805 add_folder_to_playlist_callback(list[i], NULL);
2806 destroy_folder_progress_window();
2807 } else {
2808 // subtitle?
2809 if (g_strrstr(list[i], ".ass") != NULL || g_strrstr(list[i], ".ssa") != NULL
2810 || g_strrstr(list[i], ".srt") != NULL) {
2811 filename = g_filename_from_uri(list[i], NULL, NULL);
2812 if (filename != NULL) {
2813 gtk_list_store_set(playliststore, &iter, SUBTITLE_COLUMN, filename, -1);
2814 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_FILE,
2815 filename);
2816 g_free(filename);
2817 }
2818 } else {
2819 playlist = detect_playlist(list[i]);
2820
2821 if (!playlist) {
2822 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist))) {
2823 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
2824 dontplaynext = TRUE;
2825 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
2826 gtk_list_store_clear(playliststore);
2827 added_single = add_item_to_playlist(list[i], playlist);
2828 } else {
2829 add_item_to_playlist(list[i], playlist);
2830 }
2831 } else {
2832 if (!parse_playlist(list[i])) {
2833 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist))) {
2834 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) !=
2835 MEDIA_STATE_UNKNOWN)
2836 dontplaynext = TRUE;
2837 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
2838 gtk_list_store_clear(playliststore);
2839 added_single = add_item_to_playlist(list[i], playlist);
2840 } else {
2841 add_item_to_playlist(list[i], playlist);
2842 }
2843 }
2844 }
2845 }
2846 }
2847 }
2848 i++;
2849 }
2850
2851 if (itemcount == 0 || added_single) {
2852 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter);
2853 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
2854 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
2855 g_idle_add(async_play_iter, &iter);
2856 }
2857
2858 g_strfreev(list);
2859 update_gui();
2860 }
2861 return TRUE;
2862
2863 }
2864
pause_callback(GtkWidget * widget,GdkEventExpose * event,void * data)2865 gboolean pause_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
2866 {
2867 return play_callback(widget, event, data);
2868 }
2869
play_callback(GtkWidget * widget,GdkEventExpose * event,void * data)2870 gboolean play_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
2871 {
2872 IdleData *idle = (IdleData *) data;
2873
2874 autostart = 1;
2875 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_STOP ||
2876 gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2877 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PLAY);
2878
2879 } else if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY) {
2880 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_PAUSE);
2881 }
2882
2883 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_UNKNOWN) {
2884 if (next_item_in_playlist(&iter)) {
2885 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
2886 g_idle_add(async_play_iter, &iter);
2887 } else {
2888 if (is_first_item_in_playlist(&iter)) {
2889 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
2890 g_idle_add(async_play_iter, &iter);
2891 }
2892 }
2893 }
2894
2895 if (idle == NULL) {
2896 dbus_send_rpsignal("RP_Play");
2897 }
2898 dbus_send_rpsignal_with_int("RP_SetGUIState",
2899 media_state_to_playstate(gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media))));
2900
2901 return FALSE;
2902 }
2903
stop_callback(GtkWidget * widget,GdkEventExpose * event,void * data)2904 gboolean stop_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
2905 {
2906 IdleData *idle = (IdleData *) data;
2907 #ifdef GTK3_ENABLED
2908 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
2909 const gchar *icon_start;
2910
2911 if (gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL)
2912 icon_start = "media-playback-start-rtl-symbolic";
2913 else
2914 icon_start = "media-playback-start-symbolic";
2915 #endif
2916
2917 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY ||
2918 gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2919 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_STOP);
2920 autopause = FALSE;
2921 if (gmtk_media_player_get_media_type(GMTK_MEDIA_PLAYER(media)) == TYPE_NETWORK)
2922 dontplaynext = TRUE;
2923 gmtk_media_tracker_set_percentage(tracker, 0.0);
2924 gtk_widget_set_sensitive(play_event_box, TRUE);
2925 #ifdef GTK3_ENABLED
2926 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
2927 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
2928 } else {
2929 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
2930 }
2931 #else
2932 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
2933 #endif
2934 #ifdef GTK2_12_ENABLED
2935 gtk_widget_set_tooltip_text(play_event_box, _("Play"));
2936 #else
2937 gtk_tooltips_set_tip(tooltip, play_event_box, _("Play"), NULL);
2938 #endif
2939 }
2940
2941 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_QUIT) {
2942 gmtk_media_tracker_set_percentage(tracker, 0.0);
2943 #ifdef GTK3_ENABLED
2944 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
2945 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
2946 } else {
2947 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
2948 }
2949 #else
2950 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
2951 #endif
2952 #ifdef GTK2_12_ENABLED
2953 gtk_widget_set_tooltip_text(play_event_box, _("Play"));
2954 #else
2955 gtk_tooltips_set_tip(tooltip, play_event_box, _("Play"), NULL);
2956 #endif
2957 }
2958
2959 g_idle_add(set_progress_value, idledata);
2960 g_strlcpy(idledata->progress_text, _("Stopped"), sizeof(idledata->progress_text));
2961 g_idle_add(set_progress_text, idledata);
2962
2963 if (idle == NULL) {
2964 dbus_send_rpsignal("RP_Stop");
2965 }
2966
2967 dbus_send_rpsignal_with_int("RP_SetGUIState",
2968 media_state_to_playstate(gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media))));
2969 dbus_enable_screensaver();
2970
2971 return FALSE;
2972 }
2973
ff_callback(GtkWidget * widget,GdkEventExpose * event,void * data)2974 gboolean ff_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
2975 {
2976 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP) {
2977 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 10.0, SEEK_RELATIVE);
2978
2979 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
2980 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 0.0, SEEK_RELATIVE);
2981 idledata->position += 10;
2982 if (idledata->position > idledata->length)
2983 idledata->position = 0;
2984 gmtk_media_tracker_set_percentage(tracker, idledata->position / idledata->length);
2985 }
2986 }
2987
2988 if (rpconsole != NULL && widget != NULL) {
2989 dbus_send_rpsignal("RP_FastForward");
2990 }
2991
2992 return FALSE;
2993 }
2994
rew_callback(GtkWidget * widget,GdkEventExpose * event,void * data)2995 gboolean rew_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
2996 {
2997 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP) {
2998 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), -10.0, SEEK_RELATIVE);
2999 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
3000 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), 0.0, SEEK_RELATIVE);
3001 idledata->position -= 10;
3002 if (idledata->position < 0)
3003 idledata->position = 0;
3004 gmtk_media_tracker_set_percentage(tracker, idledata->position / idledata->length);
3005 }
3006 }
3007
3008 if (rpconsole != NULL && widget != NULL) {
3009 dbus_send_rpsignal("RP_FastReverse");
3010 }
3011
3012 return FALSE;
3013 }
3014
prev_callback(GtkWidget * widget,GdkEventExpose * event,void * data)3015 gboolean prev_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
3016 {
3017 gboolean valid = FALSE;
3018 GtkTreePath *path;
3019 GtkTreeIter previter;
3020 GtkTreeIter localiter;
3021 #ifdef GTK3_ENABLED
3022 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
3023 const gchar *icon_start;
3024
3025 if (gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL)
3026 icon_start = "media-playback-start-rtl-symbolic";
3027 else
3028 icon_start = "media-playback-start-symbolic";
3029 #endif
3030
3031 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
3032 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
3033 valid = FALSE;
3034 gmtk_media_player_seek_chapter(GMTK_MEDIA_PLAYER(media), -1, SEEK_RELATIVE);
3035 } else {
3036 valid = prev_item_in_playlist(&iter);
3037 }
3038 } else {
3039 // for the case where we have rolled off the end of the list, allow prev to work
3040 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &localiter);
3041 do {
3042 previter = localiter;
3043 valid = TRUE;
3044 gtk_tree_model_iter_next(GTK_TREE_MODEL(playliststore), &localiter);
3045 } while (gtk_list_store_iter_is_valid(playliststore, &localiter));
3046 iter = previter;
3047
3048 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
3049 valid = FALSE;
3050 gmtk_media_player_seek_chapter(GMTK_MEDIA_PLAYER(media), -1, SEEK_RELATIVE);
3051 }
3052 }
3053
3054 if (valid) {
3055 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3056 dontplaynext = TRUE;
3057 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3058 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
3059 g_idle_add(async_play_iter, &iter);
3060 if (autopause) {
3061 autopause = FALSE;
3062 gtk_widget_set_sensitive(play_event_box, TRUE);
3063 #ifdef GTK3_ENABLED
3064 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
3065 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
3066 } else {
3067 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
3068 }
3069 #else
3070 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
3071 #endif
3072 }
3073 gtk_widget_set_sensitive(ff_event_box, TRUE);
3074 gtk_widget_set_sensitive(rew_event_box, TRUE);
3075
3076 }
3077
3078 if (GTK_IS_TREE_SELECTION(selection)) {
3079 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
3080 path = gtk_tree_model_get_path(GTK_TREE_MODEL(playliststore), &iter);
3081 gtk_tree_selection_select_path(selection, path);
3082 if (GTK_IS_WIDGET(list))
3083 gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(list), path, NULL, FALSE, 0, 0);
3084 gtk_tree_path_free(path);
3085 }
3086 }
3087
3088 return FALSE;
3089 }
3090
next_callback(GtkWidget * widget,GdkEventExpose * event,void * data)3091 gboolean next_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
3092 {
3093 gboolean valid = FALSE;
3094 GtkTreePath *path;
3095 #ifdef GTK3_ENABLED
3096 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
3097 const gchar *icon_start;
3098
3099 if (gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL)
3100 icon_start = "media-playback-start-rtl-symbolic";
3101 else
3102 icon_start = "media-playback-start-symbolic";
3103 #endif
3104
3105 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
3106 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
3107 gmtk_media_player_seek_chapter(GMTK_MEDIA_PLAYER(media), 1, SEEK_RELATIVE);
3108 } else {
3109 valid = next_item_in_playlist(&iter);
3110 }
3111 } else {
3112 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)) {
3113 gmtk_media_player_seek_chapter(GMTK_MEDIA_PLAYER(media), 1, SEEK_RELATIVE);
3114 }
3115 }
3116
3117 if (valid) {
3118 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3119 dontplaynext = TRUE;
3120 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3121 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
3122 g_idle_add(async_play_iter, &iter);
3123 if (autopause) {
3124 autopause = FALSE;
3125 gtk_widget_set_sensitive(play_event_box, TRUE);
3126 #ifdef GTK3_ENABLED
3127 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
3128 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
3129 } else {
3130 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
3131 }
3132 #else
3133 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
3134 #endif
3135 }
3136 gtk_widget_set_sensitive(ff_event_box, TRUE);
3137 gtk_widget_set_sensitive(rew_event_box, TRUE);
3138
3139 }
3140
3141 if (GTK_IS_TREE_SELECTION(selection)) {
3142 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
3143 path = gtk_tree_model_get_path(GTK_TREE_MODEL(playliststore), &iter);
3144 gtk_tree_selection_select_path(selection, path);
3145 if (GTK_IS_WIDGET(list))
3146 gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(list), path, NULL, FALSE, 0, 0);
3147 gtk_tree_path_free(path);
3148 }
3149 }
3150
3151 return FALSE;
3152 }
3153
menu_callback(GtkWidget * widget,GdkEventExpose * event,void * data)3154 gboolean menu_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
3155 {
3156 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SHOW_DVD_MENU);
3157 return FALSE;
3158 }
3159
vol_slider_callback(GtkRange * range,gpointer user_data)3160 void vol_slider_callback(GtkRange * range, gpointer user_data)
3161 {
3162 gdouble vol = gtk_range_get_value(range);
3163 gm_log(verbose, G_LOG_LEVEL_DEBUG, "vol_slider_callback new volume is %f", audio_device.volume);
3164 if (softvol || audio_device.type == AUDIO_TYPE_SOFTVOL) {
3165 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED) && vol > 0) {
3166 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, FALSE);
3167 }
3168 if ((vol * 100) == 0) {
3169 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, TRUE);
3170 } else {
3171 gmtk_media_player_set_volume(GMTK_MEDIA_PLAYER(media), gtk_range_get_value(range));
3172 }
3173
3174 if (remember_softvol) {
3175 volume_softvol = vol;
3176 set_software_volume(&volume_softvol);
3177 }
3178 } else {
3179 if (!gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED))
3180 gm_audio_set_volume(&audio_device, gtk_range_get_value(range));
3181 }
3182
3183 dbus_send_rpsignal_with_double("RP_Volume", gtk_range_get_value(GTK_RANGE(vol_slider)));
3184 mpris_send_signal_VolumeChanged();
3185 }
3186
3187 #ifdef GTK2_12_ENABLED
vol_button_value_changed_callback(GtkScaleButton * volume,gdouble value,gpointer data)3188 void vol_button_value_changed_callback(GtkScaleButton * volume, gdouble value, gpointer data)
3189 {
3190
3191 if (softvol || audio_device.type == AUDIO_TYPE_SOFTVOL) {
3192 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED) && value > 0) {
3193 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, FALSE);
3194 }
3195 if ((gint) (value * 100) == 0) {
3196 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED, TRUE);
3197 } else {
3198 gmtk_media_player_set_volume(GMTK_MEDIA_PLAYER(media), value);
3199 }
3200
3201 if (remember_softvol) {
3202 volume_softvol = value;
3203 set_software_volume(&volume_softvol);
3204 }
3205
3206 } else {
3207 if (!gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MUTED))
3208 gm_audio_set_volume(&audio_device, value);
3209 }
3210
3211 dbus_send_rpsignal_with_double("RP_Volume", value * 100.0);
3212 mpris_send_signal_VolumeChanged();
3213 }
3214 #endif
3215
make_panel_and_mouse_invisible(gpointer data)3216 gboolean make_panel_and_mouse_invisible(gpointer data)
3217 {
3218 GTimeVal currenttime;
3219 GdkCursor *cursor;
3220 #ifdef GTK3_ENABLED
3221 cairo_surface_t *s;
3222 GdkPixbuf *cursor_pixbuf;
3223 #else
3224 GdkColor cursor_color = { 0, 0, 0, 0 };
3225 GdkPixmap *cursor_source;
3226 #endif
3227 if ((fullscreen || always_hide_after_timeout) && auto_hide_timeout > 0
3228 && (gmtk_get_visible(controls_box) || fs_controls != NULL)
3229 && mouse_over_controls == FALSE) {
3230 g_get_current_time(¤ttime);
3231 g_time_val_add(¤ttime, -auto_hide_timeout * G_USEC_PER_SEC);
3232 if (last_movement_time > 0 && currenttime.tv_sec > last_movement_time) {
3233 hide_fs_controls();
3234 }
3235
3236 }
3237
3238 g_get_current_time(¤ttime);
3239 g_time_val_add(¤ttime, -auto_hide_timeout * G_USEC_PER_SEC);
3240 /*
3241 printf("%i, %i, %i, %i, %i, %i\n", currenttime.tv_sec,
3242 get_visible(menu_file),
3243 get_visible(menu_edit),
3244 get_visible(menu_view),
3245 get_visible(menu_help),
3246 gtk_tree_view_get_enable_search(GTK_TREE_VIEW(list)));
3247 */
3248 if (gmtk_get_visible(GTK_WIDGET(menu_file))
3249 || gmtk_get_visible(GTK_WIDGET(menu_edit))
3250 || gmtk_get_visible(GTK_WIDGET(menu_view))
3251 || gmtk_get_visible(GTK_WIDGET(menu_help))
3252 || gtk_tree_view_get_enable_search(GTK_TREE_VIEW(list))) {
3253
3254 gdk_window_set_cursor(gmtk_get_window(window), NULL);
3255
3256 } else {
3257
3258 if (last_movement_time > 0 && currenttime.tv_sec > last_movement_time) {
3259 #ifdef GTK3_ENABLED
3260 s = cairo_image_surface_create(CAIRO_FORMAT_A1, 1, 1);
3261 cursor_pixbuf = gdk_pixbuf_get_from_surface(s, 0, 0, 1, 1);
3262 cairo_surface_destroy(s);
3263 cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(), cursor_pixbuf, 0, 0);
3264 g_object_unref(cursor_pixbuf);
3265 gdk_window_set_cursor(gmtk_get_window(window), cursor);
3266 g_object_unref(cursor);
3267 #else
3268 cursor_source = gdk_pixmap_new(NULL, 1, 1, 1);
3269 cursor = gdk_cursor_new_from_pixmap(cursor_source, cursor_source, &cursor_color, &cursor_color, 0, 0);
3270 gdk_pixmap_unref(cursor_source);
3271 gdk_window_set_cursor(gmtk_get_window(window), cursor);
3272 gdk_cursor_unref(cursor);
3273 #endif
3274 }
3275 }
3276
3277 return FALSE;
3278 }
3279
make_panel_and_mouse_visible(gpointer data)3280 gboolean make_panel_and_mouse_visible(gpointer data)
3281 {
3282
3283 if (showcontrols && GTK_IS_WIDGET(controls_box)) {
3284 //gtk_widget_set_size_request(controls_box, -1, -1);
3285 //gtk_widget_show(controls_box);
3286 show_fs_controls();
3287
3288 }
3289 gdk_window_set_cursor(gmtk_get_window(window), NULL);
3290
3291 return FALSE;
3292 }
3293
fs_callback(GtkWidget * widget,GdkEventExpose * event,void * data)3294 gboolean fs_callback(GtkWidget * widget, GdkEventExpose * event, void *data)
3295 {
3296 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), !fullscreen);
3297
3298 return FALSE;
3299 }
3300
enter_button_callback(GtkWidget * widget,GdkEventCrossing * event,gpointer data)3301 gboolean enter_button_callback(GtkWidget * widget, GdkEventCrossing * event, gpointer data)
3302 {
3303 GtkAllocation alloc;
3304
3305 gmtk_get_allocation(widget, &alloc);
3306
3307 #ifdef GTK3_ENABLED
3308 #else
3309 gdk_draw_rectangle(gmtk_get_window(widget), gtk_widget_get_style(widget)->fg_gc[GTK_STATE_NORMAL],
3310 FALSE, 0, 0, alloc.width - 1, alloc.height - 1);
3311 #endif
3312 in_button = TRUE;
3313 return FALSE;
3314 }
3315
leave_button_callback(GtkWidget * widget,GdkEventCrossing * event,gpointer data)3316 gboolean leave_button_callback(GtkWidget * widget, GdkEventCrossing * event, gpointer data)
3317 {
3318 GtkAllocation alloc;
3319
3320 gmtk_get_allocation(widget, &alloc);
3321 #ifdef GTK3_ENABLED
3322 #else
3323 gdk_draw_rectangle(gmtk_get_window(widget), gtk_widget_get_style(widget)->bg_gc[GTK_STATE_NORMAL],
3324 FALSE, 0, 0, alloc.width - 1, alloc.height - 1);
3325 #endif
3326 in_button = FALSE;
3327 return FALSE;
3328 }
3329
fs_controls_entered(GtkWidget * widget,GdkEventCrossing * event,gpointer data)3330 gboolean fs_controls_entered(GtkWidget * widget, GdkEventCrossing * event, gpointer data)
3331 {
3332 mouse_over_controls = TRUE;
3333 return FALSE;
3334 }
3335
fs_controls_left(GtkWidget * widget,GdkEventCrossing * event,gpointer data)3336 gboolean fs_controls_left(GtkWidget * widget, GdkEventCrossing * event, gpointer data)
3337 {
3338 mouse_over_controls = FALSE;
3339 return FALSE;
3340 }
3341
3342
menuitem_open_callback(GtkMenuItem * menuitem,void * data)3343 void menuitem_open_callback(GtkMenuItem * menuitem, void *data)
3344 {
3345
3346 GtkWidget *dialog;
3347 GSList *filename;
3348 gchar *last_dir;
3349 gint count;
3350 GtkTreeViewColumn *column;
3351 gchar *coltitle;
3352
3353 dialog = gtk_file_chooser_dialog_new(_("Open File"),
3354 GTK_WINDOW(window),
3355 GTK_FILE_CHOOSER_ACTION_OPEN,
3356 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3357 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
3358
3359 /*allow multiple files to be selected */
3360 gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(dialog), TRUE);
3361 #ifdef GIO_ENABLED
3362 gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(dialog), FALSE);
3363 #endif
3364
3365 gtk_widget_show(dialog);
3366 gm_store = gm_pref_store_new("gnome-mplayer");
3367 last_dir = gm_pref_store_get_string(gm_store, LAST_DIR);
3368 if (last_dir != NULL && is_uri_dir(last_dir)) {
3369 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), last_dir);
3370 g_free(last_dir);
3371 }
3372 gm_pref_store_free(gm_store);
3373 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
3374
3375 filename = gtk_file_chooser_get_uris(GTK_FILE_CHOOSER(dialog));
3376 last_dir = gtk_file_chooser_get_current_folder_uri(GTK_FILE_CHOOSER(dialog));
3377 if (last_dir != NULL && is_uri_dir(last_dir)) {
3378 gm_store = gm_pref_store_new("gnome-mplayer");
3379 gm_pref_store_set_string(gm_store, LAST_DIR, last_dir);
3380 gm_pref_store_free(gm_store);
3381 g_free(last_dir);
3382 }
3383 #ifdef LIBGDA_ENABLED
3384 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY
3385 || gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
3386
3387 mark_uri_in_db_as_resumable(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), TRUE,
3388 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
3389 ATTRIBUTE_POSITION));
3390 } else {
3391
3392 if (gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)) != NULL) {
3393 mark_uri_in_db_as_resumable(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), FALSE,
3394 0.0);
3395 }
3396 }
3397 #endif
3398
3399 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3400 dontplaynext = TRUE;
3401 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3402 gtk_list_store_clear(playliststore);
3403
3404 if (filename != NULL) {
3405 g_slist_foreach(filename, &add_item_to_playlist_callback, NULL);
3406 g_slist_free(filename);
3407
3408 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter);
3409 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
3410 g_idle_add(async_play_iter, &iter);
3411 }
3412 }
3413
3414 if (GTK_IS_WIDGET(list)) {
3415 column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), 0);
3416 count = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL);
3417 coltitle = g_strdup_printf(ngettext("Item to Play", "Items to Play", count));
3418 gtk_tree_view_column_set_title(column, coltitle);
3419 g_free(coltitle);
3420 }
3421 gtk_widget_destroy(dialog);
3422
3423 }
3424
open_location_callback(GtkWidget * widget,void * data)3425 void open_location_callback(GtkWidget * widget, void *data)
3426 {
3427 gchar *filename;
3428
3429 filename = g_strdup(gtk_entry_get_text(GTK_ENTRY(open_location)));
3430
3431 if (filename != NULL && strlen(filename) > 0) {
3432 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3433 dontplaynext = TRUE;
3434 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3435 gtk_list_store_clear(playliststore);
3436
3437 if (filename != NULL) {
3438
3439 playlist = detect_playlist(filename);
3440
3441 if (!playlist) {
3442 add_item_to_playlist(filename, playlist);
3443 } else {
3444 if (!parse_playlist(filename)) {
3445 add_item_to_playlist(filename, playlist);
3446 }
3447
3448 }
3449
3450 g_free(filename);
3451 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter);
3452 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3453 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_NETWORK);
3454 g_idle_add(async_play_iter, &iter);
3455 }
3456 }
3457 if (GTK_IS_WIDGET(widget))
3458 gtk_widget_destroy(widget);
3459 }
3460
menuitem_open_location_callback(GtkMenuItem * menuitem,void * data)3461 void menuitem_open_location_callback(GtkMenuItem * menuitem, void *data)
3462 {
3463 GtkWidget *open_window;
3464 GtkWidget *vbox;
3465 GtkWidget *item_box;
3466 GtkWidget *label;
3467 GtkWidget *button_box;
3468 GtkWidget *cancel_button;
3469 GtkWidget *open_button;
3470
3471 open_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
3472 gtk_window_set_type_hint(GTK_WINDOW(open_window), GDK_WINDOW_TYPE_HINT_UTILITY);
3473 gtk_window_set_resizable(GTK_WINDOW(open_window), FALSE);
3474 gtk_window_set_transient_for(GTK_WINDOW(open_window), GTK_WINDOW(window));
3475 gtk_window_set_position(GTK_WINDOW(open_window), GTK_WIN_POS_CENTER_ON_PARENT);
3476 gtk_window_set_icon(GTK_WINDOW(open_window), pb_icon);
3477
3478 gtk_window_set_resizable(GTK_WINDOW(open_window), FALSE);
3479 gtk_window_set_title(GTK_WINDOW(open_window), _("Open Location"));
3480 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
3481 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
3482 gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE);
3483 #else
3484 vbox = gtk_vbox_new(FALSE, 6);
3485 #endif
3486 label = gtk_label_new(_("Location:"));
3487 open_location = gtk_entry_new();
3488 gtk_entry_set_width_chars(GTK_ENTRY(open_location), 50);
3489 gtk_entry_set_activates_default(GTK_ENTRY(open_location), TRUE);
3490 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
3491 item_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
3492 gtk_box_set_homogeneous(GTK_BOX(item_box), FALSE);
3493 #else
3494 item_box = gtk_hbox_new(FALSE, 6);
3495 #endif
3496 gtk_box_pack_start(GTK_BOX(item_box), label, FALSE, FALSE, 12);
3497 gtk_box_pack_end(GTK_BOX(item_box), open_location, TRUE, TRUE, 0);
3498
3499 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
3500 button_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
3501 gtk_box_set_homogeneous(GTK_BOX(button_box), FALSE);
3502 #else
3503 button_box = gtk_hbox_new(FALSE, 6);
3504 #endif
3505 cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
3506 open_button = gtk_button_new_from_stock(GTK_STOCK_OPEN);
3507 #ifdef GTK2_22_ENABLED
3508 gtk_widget_set_can_default(open_button, TRUE);
3509 #else
3510 GTK_WIDGET_SET_FLAGS(open_button, GTK_CAN_DEFAULT);
3511 #endif
3512 gtk_box_pack_end(GTK_BOX(button_box), open_button, FALSE, FALSE, 0);
3513 gtk_box_pack_end(GTK_BOX(button_box), cancel_button, FALSE, FALSE, 0);
3514
3515 g_signal_connect_swapped(G_OBJECT(cancel_button), "clicked", G_CALLBACK(config_close), open_window);
3516 g_signal_connect_swapped(G_OBJECT(open_button), "clicked", G_CALLBACK(open_location_callback), open_window);
3517
3518 gtk_container_add(GTK_CONTAINER(vbox), item_box);
3519 gtk_container_add(GTK_CONTAINER(vbox), button_box);
3520 gtk_container_add(GTK_CONTAINER(open_window), vbox);
3521 gtk_widget_show_all(open_window);
3522 gtk_window_set_transient_for(GTK_WINDOW(open_window), GTK_WINDOW(window));
3523 gtk_window_set_keep_above(GTK_WINDOW(open_window), keep_on_top);
3524 gtk_window_present(GTK_WINDOW(open_window));
3525 gtk_widget_grab_default(open_button);
3526
3527 }
3528
3529
menuitem_open_dvd_callback(GtkMenuItem * menuitem,void * data)3530 void menuitem_open_dvd_callback(GtkMenuItem * menuitem, void *data)
3531 {
3532 gtk_list_store_clear(playliststore);
3533 if (idledata->device != NULL) {
3534 g_free(idledata->device);
3535 idledata->device = NULL;
3536 }
3537 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3538 parse_dvd("dvd://");
3539
3540 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3541 play_iter(&iter, 0);
3542 }
3543 }
3544
menuitem_open_dvd_folder_callback(GtkMenuItem * menuitem,void * data)3545 void menuitem_open_dvd_folder_callback(GtkMenuItem * menuitem, void *data)
3546 {
3547 GtkWidget *dialog;
3548 gchar *last_dir;
3549
3550 dialog = gtk_file_chooser_dialog_new(_("Choose Disk Directory"),
3551 GTK_WINDOW(window),
3552 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
3553 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3554 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
3555 gtk_widget_show(dialog);
3556 gm_store = gm_pref_store_new("gnome-mplayer");
3557 last_dir = gm_pref_store_get_string(gm_store, LAST_DIR);
3558 if (last_dir != NULL && is_uri_dir(last_dir)) {
3559 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), last_dir);
3560 g_free(last_dir);
3561 }
3562 gm_pref_store_free(gm_store);
3563
3564 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
3565
3566 gtk_list_store_clear(playliststore);
3567 idledata->device = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
3568
3569 parse_dvd("dvd://");
3570
3571 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3572 play_iter(&iter, 0);
3573 }
3574 }
3575 if (GTK_IS_WIDGET(dialog))
3576 gtk_widget_destroy(dialog);
3577
3578 }
3579
menuitem_open_dvd_iso_callback(GtkMenuItem * menuitem,void * data)3580 void menuitem_open_dvd_iso_callback(GtkMenuItem * menuitem, void *data)
3581 {
3582 GtkWidget *dialog;
3583 gchar *last_dir;
3584 GtkFileFilter *filter;
3585
3586 dialog = gtk_file_chooser_dialog_new(_("Choose Disk Image"),
3587 GTK_WINDOW(window),
3588 GTK_FILE_CHOOSER_ACTION_OPEN,
3589 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3590 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
3591 gtk_widget_show(dialog);
3592 gm_store = gm_pref_store_new("gnome-mplayer");
3593 last_dir = gm_pref_store_get_string(gm_store, LAST_DIR);
3594 if (last_dir != NULL && is_uri_dir(last_dir)) {
3595 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), last_dir);
3596 g_free(last_dir);
3597 }
3598 gm_pref_store_free(gm_store);
3599 filter = gtk_file_filter_new();
3600 gtk_file_filter_set_name(filter, _("Disk Image (*.iso)"));
3601 gtk_file_filter_add_pattern(filter, "*.iso");
3602 gtk_file_filter_add_pattern(filter, "*.ISO");
3603 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
3604
3605 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
3606
3607 gtk_list_store_clear(playliststore);
3608 idledata->device = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
3609
3610 parse_dvd("dvd://");
3611
3612 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3613 play_iter(&iter, 0);
3614 }
3615 }
3616 if (GTK_IS_WIDGET(dialog))
3617 gtk_widget_destroy(dialog);
3618
3619 }
3620
menuitem_open_dvdnav_callback(GtkMenuItem * menuitem,void * data)3621 void menuitem_open_dvdnav_callback(GtkMenuItem * menuitem, void *data)
3622 {
3623 gtk_list_store_clear(playliststore);
3624 if (idledata->device != NULL) {
3625 g_free(idledata->device);
3626 idledata->device = NULL;
3627 }
3628 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3629 add_item_to_playlist("dvdnav://", FALSE);
3630 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter);
3631 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_DVD);
3632 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MEDIA_DEVICE, mplayer_dvd_device);
3633 g_idle_add(async_play_iter, &iter);
3634 gtk_widget_show(menu_event_box);
3635 }
3636
menuitem_open_dvdnav_folder_callback(GtkMenuItem * menuitem,void * data)3637 void menuitem_open_dvdnav_folder_callback(GtkMenuItem * menuitem, void *data)
3638 {
3639 GtkWidget *dialog;
3640 gchar *last_dir;
3641
3642 dialog = gtk_file_chooser_dialog_new(_("Choose Disk Directory"),
3643 GTK_WINDOW(window),
3644 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
3645 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3646 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
3647 gtk_widget_show(dialog);
3648 gm_store = gm_pref_store_new("gnome-mplayer");
3649 last_dir = gm_pref_store_get_string(gm_store, LAST_DIR);
3650 if (last_dir != NULL && is_uri_dir(last_dir)) {
3651 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), last_dir);
3652 g_free(last_dir);
3653 }
3654 gm_pref_store_free(gm_store);
3655
3656 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
3657
3658 gtk_list_store_clear(playliststore);
3659 idledata->device = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
3660
3661 add_item_to_playlist("dvdnav://", FALSE);
3662 gtk_widget_show(menu_event_box);
3663
3664 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3665 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3666 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MEDIA_DEVICE, idledata->device);
3667 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_DVD);
3668 g_idle_add(async_play_iter, &iter);
3669 }
3670 }
3671 if (GTK_IS_WIDGET(dialog))
3672 gtk_widget_destroy(dialog);
3673
3674 }
3675
menuitem_open_dvdnav_iso_callback(GtkMenuItem * menuitem,void * data)3676 void menuitem_open_dvdnav_iso_callback(GtkMenuItem * menuitem, void *data)
3677 {
3678 GtkWidget *dialog;
3679 gchar *last_dir;
3680 GtkFileFilter *filter;
3681
3682 dialog = gtk_file_chooser_dialog_new(_("Choose Disk Image"),
3683 GTK_WINDOW(window),
3684 GTK_FILE_CHOOSER_ACTION_OPEN,
3685 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3686 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
3687 gtk_widget_show(dialog);
3688 gm_store = gm_pref_store_new("gnome-mplayer");
3689 last_dir = gm_pref_store_get_string(gm_store, LAST_DIR);
3690 if (last_dir != NULL && is_uri_dir(last_dir)) {
3691 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), last_dir);
3692 g_free(last_dir);
3693 }
3694 gm_pref_store_free(gm_store);
3695 filter = gtk_file_filter_new();
3696 gtk_file_filter_set_name(filter, _("Disk Image (*.iso)"));
3697 gtk_file_filter_add_pattern(filter, "*.iso");
3698 gtk_file_filter_add_pattern(filter, "*.ISO");
3699 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
3700
3701 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
3702
3703 gtk_list_store_clear(playliststore);
3704 idledata->device = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
3705
3706 add_item_to_playlist("dvdnav://", FALSE);
3707 gtk_widget_show(menu_event_box);
3708
3709 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3710 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3711 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MEDIA_DEVICE, idledata->device);
3712 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_DVD);
3713 g_idle_add(async_play_iter, &iter);
3714 }
3715 }
3716 if (GTK_IS_WIDGET(dialog))
3717 gtk_widget_destroy(dialog);
3718
3719 }
3720
menuitem_open_acd_callback(GtkMenuItem * menuitem,void * data)3721 void menuitem_open_acd_callback(GtkMenuItem * menuitem, void *data)
3722 {
3723 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3724 dontplaynext = TRUE;
3725 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3726 gtk_list_store_clear(playliststore);
3727 parse_playlist("cdda://");
3728
3729 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3730 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3731 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MEDIA_DEVICE, mplayer_dvd_device);
3732 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_CD);
3733 g_idle_add(async_play_iter, &iter);
3734 }
3735
3736 }
3737
menuitem_open_vcd_callback(GtkMenuItem * menuitem,void * data)3738 void menuitem_open_vcd_callback(GtkMenuItem * menuitem, void *data)
3739 {
3740 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3741 dontplaynext = TRUE;
3742 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3743 gtk_list_store_clear(playliststore);
3744 parse_playlist("vcd://");
3745
3746 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3747 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3748 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_MEDIA_DEVICE, mplayer_dvd_device);
3749 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_VCD);
3750 g_idle_add(async_play_iter, &iter);
3751 }
3752
3753 }
3754
menuitem_open_atv_callback(GtkMenuItem * menuitem,void * data)3755 void menuitem_open_atv_callback(GtkMenuItem * menuitem, void *data)
3756 {
3757 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3758 dontplaynext = TRUE;
3759 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3760 gtk_list_store_clear(playliststore);
3761 add_item_to_playlist("tv://", FALSE);
3762
3763 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter)) {
3764 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3765 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_TV);
3766 g_idle_add(async_play_iter, &iter);
3767 }
3768 }
3769
menuitem_open_recent_callback(GtkRecentChooser * chooser,gpointer data)3770 void menuitem_open_recent_callback(GtkRecentChooser * chooser, gpointer data)
3771 {
3772 gboolean playlist = FALSE;
3773 gchar *uri;
3774 gint count;
3775 GtkTreeViewColumn *column;
3776 gchar *coltitle;
3777
3778 #ifdef LIBGDA_ENABLED
3779 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY
3780 || gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
3781
3782 mark_uri_in_db_as_resumable(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), TRUE,
3783 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
3784 ATTRIBUTE_POSITION));
3785 } else {
3786
3787 if (gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)) != NULL) {
3788 mark_uri_in_db_as_resumable(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), FALSE, 0.0);
3789 }
3790 }
3791 #endif
3792
3793 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3794 dontplaynext = TRUE;
3795 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3796 gtk_list_store_clear(playliststore);
3797
3798 uri = gtk_recent_chooser_get_current_uri(chooser);
3799 if (uri != NULL) {
3800 if (playlist == FALSE)
3801 playlist = detect_playlist(uri);
3802
3803 if (!playlist) {
3804 add_item_to_playlist(uri, playlist);
3805 } else {
3806 if (!parse_playlist(uri)) {
3807 add_item_to_playlist(uri, playlist);
3808 }
3809 }
3810 }
3811
3812 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter);
3813
3814 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
3815 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3816 dontplaynext = TRUE;
3817 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3818 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_FILE);
3819 g_idle_add(async_play_iter, &iter);
3820 }
3821
3822 if (GTK_IS_WIDGET(list)) {
3823 column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), 0);
3824 count = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL);
3825 coltitle = g_strdup_printf(ngettext("Item to Play", "Items to Play", count));
3826 gtk_tree_view_column_set_title(column, coltitle);
3827 g_free(coltitle);
3828 }
3829 }
3830
3831 #ifdef GTK2_12_ENABLED
recent_manager_changed_callback(GtkRecentManager * recent_manager,gpointer data)3832 void recent_manager_changed_callback(GtkRecentManager * recent_manager, gpointer data)
3833 {
3834 GtkRecentFilter *recent_filter;
3835
3836 if (GTK_IS_WIDGET(menuitem_file_recent_items))
3837 gtk_widget_destroy(menuitem_file_recent_items);
3838 menuitem_file_recent_items = gtk_recent_chooser_menu_new();
3839 recent_filter = gtk_recent_filter_new();
3840 gtk_recent_filter_add_application(recent_filter, "gnome-mplayer");
3841 gtk_recent_chooser_add_filter(GTK_RECENT_CHOOSER(menuitem_file_recent_items), recent_filter);
3842 gtk_recent_chooser_set_show_tips(GTK_RECENT_CHOOSER(menuitem_file_recent_items), TRUE);
3843 gtk_recent_chooser_set_sort_type(GTK_RECENT_CHOOSER(menuitem_file_recent_items), GTK_RECENT_SORT_MRU);
3844 gtk_menu_item_set_submenu(menuitem_file_recent, menuitem_file_recent_items);
3845 g_signal_connect(G_OBJECT(menuitem_file_recent_items), "item-activated",
3846 G_CALLBACK(menuitem_open_recent_callback), NULL);
3847 #ifdef GIO_ENABLED
3848 gtk_recent_chooser_set_local_only(GTK_RECENT_CHOOSER(menuitem_file_recent_items), FALSE);
3849 #endif
3850 }
3851 #endif
3852
parseChannels(FILE * f)3853 void parseChannels(FILE * f)
3854 {
3855 gint parsing = 0, i = 0, firstW = 0, firstP = 0;
3856 gchar ch, s[256];
3857 gchar *strout;
3858
3859 while (parsing == 0) {
3860 ch = (char) fgetc(f); // Read in the next character
3861 if ((int) ch != EOF) {
3862 // If the line is empty or commented, we want to skip it.
3863 if (((ch == '\n') && (i == 0)) || ((ch == '#') && (i == 0))) {
3864 firstW++;
3865 firstP++;
3866 }
3867 if ((ch != ':') && (firstW == 0) && i < 255) {
3868 s[i] = ch;
3869 i++;
3870 } else {
3871 if ((ch == ':') && (firstP == 0)) {
3872 s[i] = '\0';
3873 strout = g_strdup_printf("dvb://%s", s);
3874 add_item_to_playlist(strout, FALSE); //add to playlist
3875 g_free(strout);
3876 i = 0;
3877 firstW++;
3878 firstP++;
3879 }
3880 if (ch == '\n') {
3881 firstW = 0;
3882 firstP = 0;
3883 }
3884 }
3885 } else
3886 parsing++;
3887 } //END while
3888 } //END parseChannels
3889
menuitem_open_dtv_callback(GtkMenuItem * menuitem,void * data)3890 void menuitem_open_dtv_callback(GtkMenuItem * menuitem, void *data)
3891 {
3892 FILE *fi; // FILE pointer to use to open the conf file
3893 gchar *mpconf;
3894
3895 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_UNKNOWN)
3896 dontplaynext = TRUE;
3897 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3898 gtk_list_store_clear(playliststore);
3899
3900 mpconf = g_strdup_printf("%s/.mplayer/channels.conf", g_getenv("HOME"));
3901 fi = fopen(mpconf, "r"); // Make sure this is pointing to
3902 // the appropriate file
3903 if (fi != NULL) {
3904 parseChannels(fi);
3905 fclose(fi);
3906 } else {
3907 gm_log(verbose, G_LOG_LEVEL_MESSAGE, "Unable to open the config file"); //can change this to whatever error message system is used
3908 }
3909 g_free(mpconf);
3910
3911 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter);
3912 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
3913 gmtk_media_player_set_state(GMTK_MEDIA_PLAYER(media), MEDIA_STATE_QUIT);
3914 gmtk_media_player_set_media_type(GMTK_MEDIA_PLAYER(media), TYPE_TV);
3915 g_idle_add(async_play_iter, &iter);
3916 }
3917 }
3918
3919 #ifdef HAVE_GPOD
menuitem_open_ipod_callback(GtkMenuItem * menuitem,void * data)3920 void menuitem_open_ipod_callback(GtkMenuItem * menuitem, void *data)
3921 {
3922 gpod_mount_point = find_gpod_mount_point();
3923 gm_log(verbose, G_LOG_LEVEL_DEBUG, "mount point is %s", gpod_mount_point);
3924 if (gpod_mount_point != NULL) {
3925 gpod_load_tracks(gpod_mount_point);
3926 } else {
3927 gm_log(verbose, G_LOG_LEVEL_MESSAGE, "Unable to find gpod mount point");
3928 }
3929 }
3930 #endif
3931
menuitem_save_callback(GtkMenuItem * menuitem,void * data)3932 void menuitem_save_callback(GtkMenuItem * menuitem, void *data)
3933 {
3934 // save dialog
3935 GtkWidget *file_chooser_save;
3936 GtkWidget *dialog;
3937 gchar *filename;
3938 gchar *srcfilename;
3939 FILE *fin;
3940 FILE *fout;
3941 char buffer[1000];
3942 gint count;
3943 gchar *default_name;
3944 gchar *uri;
3945 gchar *msg;
3946 gboolean save_file = TRUE;
3947
3948 file_chooser_save = gtk_file_chooser_dialog_new(_("Save As..."),
3949 GTK_WINDOW(window),
3950 GTK_FILE_CHOOSER_ACTION_SAVE,
3951 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
3952 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
3953
3954 uri = g_strdup(idledata->url);
3955 default_name = g_strrstr(uri, "/");
3956 if (default_name == NULL) {
3957 default_name = uri;
3958 } else {
3959 default_name += sizeof(gchar);
3960 }
3961 g_strlcpy(buffer, default_name, 1000);
3962 while (g_strrstr(buffer, "&") != NULL) {
3963 default_name = g_strrstr(buffer, "&");
3964 default_name[0] = '\0';
3965 }
3966 g_free(uri);
3967
3968 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(file_chooser_save), buffer);
3969
3970 if (gtk_dialog_run(GTK_DIALOG(file_chooser_save)) == GTK_RESPONSE_ACCEPT) {
3971 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser_save));
3972
3973 srcfilename = g_filename_from_uri(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), NULL, NULL);
3974 gm_log(verbose, G_LOG_LEVEL_INFO, "Copy %s to %s", srcfilename, filename);
3975
3976 if (g_file_test(filename, G_FILE_TEST_EXISTS) == TRUE) {
3977
3978 dialog = gtk_message_dialog_new(GTK_WINDOW(window),
3979 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
3980 GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Overwrite %s"), filename);
3981 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_NO) {
3982 save_file = FALSE;
3983 }
3984 gtk_widget_destroy(dialog);
3985 }
3986
3987 if (save_file) {
3988
3989 fin = g_fopen(srcfilename, "rb");
3990 fout = g_fopen(filename, "wb");
3991
3992 if (fin != NULL && fout != NULL) {
3993 while (!feof(fin)) {
3994 count = fread(buffer, 1, 1000, fin);
3995 fwrite(buffer, 1, count, fout);
3996 }
3997 fclose(fout);
3998 fclose(fin);
3999 } else {
4000 msg = g_strdup_printf(_("Unable to save ' %s '"), filename);
4001 dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
4002 GTK_BUTTONS_CLOSE, "%s", msg);
4003 gtk_window_set_title(GTK_WINDOW(dialog), _("GNOME MPlayer Error"));
4004 gtk_dialog_run(GTK_DIALOG(dialog));
4005 gtk_widget_destroy(dialog);
4006 g_free(msg);
4007 }
4008 }
4009
4010 g_free(filename);
4011 g_free(srcfilename);
4012 }
4013
4014 gtk_widget_destroy(file_chooser_save);
4015
4016 }
4017
4018
4019
menuitem_quit_callback(GtkMenuItem * menuitem,void * data)4020 void menuitem_quit_callback(GtkMenuItem * menuitem, void *data)
4021 {
4022 delete_callback(NULL, NULL, NULL);
4023 gtk_widget_destroy(window);
4024 }
4025
menuitem_prev_callback(GtkMenuItem * menuitem,void * data)4026 void menuitem_prev_callback(GtkMenuItem * menuitem, void *data)
4027 {
4028 prev_callback(NULL, NULL, NULL);
4029 }
4030
menuitem_next_callback(GtkMenuItem * menuitem,void * data)4031 void menuitem_next_callback(GtkMenuItem * menuitem, void *data)
4032 {
4033 next_callback(NULL, NULL, NULL);
4034 }
4035
about_url_hook(GtkAboutDialog * about,const char * link,gpointer data)4036 void about_url_hook(GtkAboutDialog * about, const char *link, gpointer data)
4037 {
4038 #ifdef GTK2_14_ENABLED
4039 GError *error = NULL;
4040
4041 if (!gtk_show_uri(gtk_widget_get_screen(GTK_WIDGET(about)), link, gtk_get_current_event_time(), &error)) {
4042 g_error_free(error);
4043 }
4044 #endif
4045 }
4046
menuitem_about_callback(GtkMenuItem * menuitem,void * data)4047 void menuitem_about_callback(GtkMenuItem * menuitem, void *data)
4048 {
4049 gchar *authors[] = { "Kevin DeKorte", "James Carthew", "Diogo Franco", "Icons provided by Victor Castillejo",
4050 NULL
4051 };
4052 #ifdef GTK2_14_ENABLED
4053 #ifndef GTK2_24_ENABLED
4054 gtk_about_dialog_set_url_hook(about_url_hook, NULL, NULL);
4055 #endif
4056 #endif
4057 gtk_show_about_dialog(GTK_WINDOW(window), "name", _("GNOME MPlayer"), "authors", authors,
4058 "copyright", "Copyright © 2007-2011 Kevin DeKorte", "comments",
4059 _("A media player for GNOME that uses MPlayer"), "version", VERSION,
4060 "license",
4061 _
4062 ("Gnome MPlayer is free software; you can redistribute it and/or modify it under\nthe terms of the GNU General Public License as published by the Free\nSoftware Foundation; either version 2 of the License, or (at your option)\nany later version."
4063 "\n\nGnome MPlayer is distributed in the hope that it will be useful, but WITHOUT\nANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\nFITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for\nmore details."
4064 "\n\nYou should have received a copy of the GNU General Public License along with\nGnome MPlayer if not, write to the\n\nFree Software Foundation, Inc.,\n51 Franklin St, Fifth Floor\nBoston, MA 02110-1301 USA")
4065
4066
4067 ,
4068 "website", "http://code.google.com/p/gnome-mplayer/",
4069 "translator-credits",
4070 "Bulgarian - Adrian Dimitrov\n"
4071 "Czech - Petr Pisar\n"
4072 "Chinese (simplified) - Wenzheng Hu\n"
4073 "Chinese (Hong Kong) - Hialan Liu\n"
4074 "Chinese (Taiwan) - Hailan Liu\n"
4075 "Dutch - Mark Huijgen\n"
4076 "Finnish - Kristian Polso & Tuomas Lähteenmäki\n"
4077 "French - Alexandre Bedot\n"
4078 "German - Tim Buening\n"
4079 "Greek - Γεώργιος Γεωργάς\n"
4080 "Hungarian - Kulcsár Kázmér\n"
4081 "Italian - Cesare Tirabassi\n"
4082 "Japanese - Munehiro Yamamoto\n"
4083 "Korean - ByeongSik Jeon\n"
4084 "Lithuanian - Mindaugas B.\n"
4085 "Polish - Julian Sikorski\n"
4086 "Portugese - LL and Sérgio Marques\n"
4087 "Russian - Dmitry Stropaloff and Denis Koryavov\n"
4088 "Serbian - Милош Поповић\n"
4089 "Spanish - Festor Wailon Dacoba\n"
4090 "Swedish - Daniel Nylander\n" "Turkish - Onur Küçük", NULL);
4091 }
4092
menuitem_play_callback(GtkMenuItem * menuitem,void * data)4093 void menuitem_play_callback(GtkMenuItem * menuitem, void *data)
4094 {
4095 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_PLAY)
4096 play_callback(GTK_WIDGET(menuitem), NULL, NULL);
4097 }
4098
menuitem_pause_callback(GtkMenuItem * menuitem,void * data)4099 void menuitem_pause_callback(GtkMenuItem * menuitem, void *data)
4100 {
4101 pause_callback(GTK_WIDGET(menuitem), NULL, NULL);
4102 }
4103
menuitem_stop_callback(GtkMenuItem * menuitem,void * data)4104 void menuitem_stop_callback(GtkMenuItem * menuitem, void *data)
4105 {
4106 stop_callback(GTK_WIDGET(menuitem), NULL, NULL);
4107 }
4108
menuitem_edit_random_callback(GtkMenuItem * menuitem,void * data)4109 void menuitem_edit_random_callback(GtkMenuItem * menuitem, void *data)
4110 {
4111 GtkTreePath *path;
4112 gchar *iterfilename = NULL;
4113 gchar *localfilename = NULL;
4114
4115 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
4116 gtk_tree_model_get(GTK_TREE_MODEL(playliststore), &iter, ITEM_COLUMN, &iterfilename, -1);
4117 }
4118
4119 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(playliststore), -2, GTK_SORT_ASCENDING);
4120
4121 random_order = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_edit_random));
4122 if (random_order) {
4123 randomize_playlist(playliststore);
4124 } else {
4125 reset_playlist_order(playliststore);
4126 }
4127
4128 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
4129 if (GTK_IS_TREE_SELECTION(selection)) {
4130 gtk_tree_model_get_iter_first(GTK_TREE_MODEL(playliststore), &iter);
4131 if (iterfilename != NULL) {
4132 do {
4133 gtk_tree_model_get(GTK_TREE_MODEL(playliststore), &iter, ITEM_COLUMN, &localfilename, -1);
4134 gm_log(verbose, G_LOG_LEVEL_DEBUG, "iter = %s local = %s", iterfilename, localfilename);
4135 if (g_ascii_strcasecmp(iterfilename, localfilename) == 0) {
4136 // we found the current iter
4137 g_free(localfilename);
4138 break;
4139 }
4140 g_free(localfilename);
4141 } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(playliststore), &iter));
4142 g_free(iterfilename);
4143 }
4144 path = gtk_tree_model_get_path(GTK_TREE_MODEL(playliststore), &iter);
4145 gtk_tree_selection_select_path(selection, path);
4146 if (GTK_IS_WIDGET(list))
4147 gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(list), path, NULL, FALSE, 0, 0);
4148 gtk_tree_path_free(path);
4149 }
4150 }
4151 }
4152
menuitem_edit_loop_callback(GtkMenuItem * menuitem,void * data)4153 void menuitem_edit_loop_callback(GtkMenuItem * menuitem, void *data)
4154 {
4155 loop = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_edit_loop));
4156 }
4157
menuitem_view_info_callback(GtkMenuItem * menuitem,void * data)4158 void menuitem_view_info_callback(GtkMenuItem * menuitem, void *data)
4159 {
4160
4161 if (GTK_IS_WIDGET(media_hbox)) {
4162 #ifdef GTK2_20_ENABLED
4163 if (!gtk_widget_get_realized(media_hbox))
4164 gtk_widget_realize(media_hbox);
4165 #else
4166 if (!GTK_WIDGET_REALIZED(media_hbox))
4167 gtk_widget_realize(media_hbox);
4168 #endif
4169 g_idle_add(set_adjust_layout, NULL);
4170 // adjust_layout();
4171 }
4172
4173 }
4174
menuitem_view_fullscreen_callback(GtkMenuItem * menuitem,void * data)4175 void menuitem_view_fullscreen_callback(GtkMenuItem * menuitem, void *data)
4176 {
4177 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen), !fullscreen);
4178 }
4179
menuitem_view_onetoone_callback(GtkMenuItem * menuitem,void * data)4180 void menuitem_view_onetoone_callback(GtkMenuItem * menuitem, void *data)
4181 {
4182 IdleData *idle = (IdleData *) data;
4183
4184 idle->width = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_WIDTH);
4185 idle->height = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HEIGHT);
4186 non_fs_width = 0;
4187 non_fs_height = 0;
4188 resize_window(idle);
4189
4190 }
4191
menuitem_view_twotoone_callback(GtkMenuItem * menuitem,void * data)4192 void menuitem_view_twotoone_callback(GtkMenuItem * menuitem, void *data)
4193 {
4194 IdleData *idle = (IdleData *) data;
4195
4196 idle->width = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_WIDTH) * 2;
4197 idle->height = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HEIGHT) * 2;
4198 non_fs_width = 0;
4199 non_fs_height = 0;
4200 resize_window(idle);
4201 }
4202
menuitem_view_onetoonepointfive_callback(GtkMenuItem * menuitem,void * data)4203 void menuitem_view_onetoonepointfive_callback(GtkMenuItem * menuitem, void *data)
4204 {
4205 IdleData *idle = (IdleData *) data;
4206
4207 idle->width = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_WIDTH) * 1.5;
4208 idle->height = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HEIGHT) * 1.5;
4209 non_fs_width = 0;
4210 non_fs_height = 0;
4211 resize_window(idle);
4212 }
4213
menuitem_view_onetotwo_callback(GtkMenuItem * menuitem,void * data)4214 void menuitem_view_onetotwo_callback(GtkMenuItem * menuitem, void *data)
4215 {
4216 IdleData *idle = (IdleData *) data;
4217
4218 idle->width = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_WIDTH) / 2;
4219 idle->height = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HEIGHT) / 2;
4220 non_fs_width = 0;
4221 non_fs_height = 0;
4222 resize_window(idle);
4223 }
4224
menuitem_view_controls_callback(GtkMenuItem * menuitem,void * data)4225 void menuitem_view_controls_callback(GtkMenuItem * menuitem, void *data)
4226 {
4227 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols),
4228 !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols)));
4229 }
4230
menuitem_view_subtitles_callback(GtkMenuItem * menuitem,void * data)4231 void menuitem_view_subtitles_callback(GtkMenuItem * menuitem, void *data)
4232 {
4233 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE,
4234 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM
4235 (menuitem_view_subtitles)));
4236
4237 // g_strdup_printf("set_property sub_forced_only %i\n",
4238 // !gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_subtitles)));
4239
4240 }
4241
4242 // Switch Audio Streams
menuitem_edit_switch_audio_callback(GtkMenuItem * menuitem,void * data)4243 void menuitem_edit_switch_audio_callback(GtkMenuItem * menuitem, void *data)
4244 {
4245 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SWITCH_AUDIO);
4246 }
4247
menuitem_edit_set_audiofile_callback(GtkMenuItem * menuitem,void * data)4248 void menuitem_edit_set_audiofile_callback(GtkMenuItem * menuitem, void *data)
4249 {
4250 gchar *audiofile = NULL;
4251 GtkWidget *dialog;
4252 gchar *path;
4253 gchar *item;
4254 gchar *p;
4255
4256 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
4257 gtk_tree_model_get(GTK_TREE_MODEL(playliststore), &iter, ITEM_COLUMN, &item, -1);
4258
4259 path = g_strdup(item);
4260 p = g_strrstr(path, "/");
4261 if (p != NULL)
4262 p[1] = '\0';
4263
4264 dialog = gtk_file_chooser_dialog_new(_("Set AudioFile"),
4265 GTK_WINDOW(window),
4266 GTK_FILE_CHOOSER_ACTION_OPEN,
4267 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
4268 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
4269 gtk_widget_show(dialog);
4270 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), path);
4271 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
4272 audiofile = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
4273 gtk_list_store_set(playliststore, &iter, AUDIOFILE_COLUMN, audiofile, -1);
4274 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_TRACK_FILE, audiofile);
4275 }
4276 gtk_widget_destroy(dialog);
4277
4278 if (audiofile != NULL) {
4279 gmtk_media_player_restart(GMTK_MEDIA_PLAYER(media));
4280 }
4281 }
4282 }
4283
menuitem_edit_set_subtitle_callback(GtkMenuItem * menuitem,void * data)4284 void menuitem_edit_set_subtitle_callback(GtkMenuItem * menuitem, void *data)
4285 {
4286 gchar *subtitle = NULL;
4287 GtkWidget *dialog;
4288 gchar *path;
4289 gchar *item;
4290 gchar *p;
4291
4292 if (gtk_list_store_iter_is_valid(playliststore, &iter)) {
4293 gtk_tree_model_get(GTK_TREE_MODEL(playliststore), &iter, ITEM_COLUMN, &item, -1);
4294
4295 path = g_strdup(item);
4296 p = g_strrstr(path, "/");
4297 if (p != NULL)
4298 p[1] = '\0';
4299
4300 dialog = gtk_file_chooser_dialog_new(_("Set Subtitle"),
4301 GTK_WINDOW(window),
4302 GTK_FILE_CHOOSER_ACTION_OPEN,
4303 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
4304 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
4305 gtk_widget_show(dialog);
4306 gtk_file_chooser_set_current_folder_uri(GTK_FILE_CHOOSER(dialog), path);
4307 if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
4308 subtitle = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
4309 gtk_list_store_set(playliststore, &iter, SUBTITLE_COLUMN, subtitle, -1);
4310 }
4311 gtk_widget_destroy(dialog);
4312
4313 if (subtitle != NULL) {
4314 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_FILE, subtitle);
4315 }
4316 }
4317 }
4318
4319 // Take Screenshot
menuitem_edit_take_screenshot_callback(GtkMenuItem * menuitem,void * data)4320 void menuitem_edit_take_screenshot_callback(GtkMenuItem * menuitem, void *data)
4321 {
4322 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_TAKE_SCREENSHOT);
4323 }
4324
menuitem_fs_callback(GtkMenuItem * menuitem,void * data)4325 void menuitem_fs_callback(GtkMenuItem * menuitem, void *data)
4326 {
4327 GdkScreen *screen;
4328 GdkRectangle rect;
4329 gint wx, wy;
4330 static gboolean restore_playlist;
4331 static gboolean restore_details;
4332 static gboolean restore_meter;
4333 static gboolean restore_info;
4334
4335 if (GTK_CHECK_MENU_ITEM(menuitem) == GTK_CHECK_MENU_ITEM(menuitem_view_fullscreen)) {
4336 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen),
4337 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_fullscreen)));
4338 return;
4339 } else {
4340 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_fullscreen),
4341 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_fullscreen)));
4342 }
4343
4344 if (fullscreen) {
4345 hide_fs_controls();
4346
4347 if (embed_window == 0) {
4348 skip_fixed_allocation_on_show = TRUE;
4349 gtk_window_unfullscreen(GTK_WINDOW(window));
4350 } else {
4351 #ifdef GTK2_20_ENABLED
4352 if (gtk_widget_get_mapped(window))
4353 gtk_widget_unmap(window);
4354 #else
4355 if (GTK_WIDGET_MAPPED(window))
4356 gtk_widget_unmap(window);
4357 #endif
4358 #ifdef GTK2_24_ENABLED
4359 gdk_window_reparent(gmtk_get_window(window),
4360 gdk_x11_window_lookup_for_display(gdk_display_get_default(), embed_window), 0, 0);
4361 #else
4362 gdk_window_reparent(gmtk_get_window(window), gdk_window_lookup(embed_window), 0, 0);
4363 #endif
4364 gtk_widget_map(window);
4365 gtk_window_move(GTK_WINDOW(window), 0, 0);
4366 gdk_window_resize(gmtk_get_window(window), window_x, window_y - 1);
4367 if (window_x > 0 && window_y > 0)
4368 gtk_window_resize(GTK_WINDOW(window), window_x, window_y);
4369 if (window_x < 250) {
4370 gtk_widget_hide(fs_event_box);
4371 }
4372 if (window_x < 170) {
4373 gtk_widget_hide(GTK_WIDGET(tracker));
4374 }
4375 gtk_widget_hide(fs_window);
4376
4377 }
4378 gtk_widget_show(menubar);
4379 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_controls))) {
4380 gtk_widget_show(controls_box);
4381 }
4382 if (restore_details) {
4383 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_details), TRUE);
4384 }
4385 if (restore_meter) {
4386 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_meter), TRUE);
4387 }
4388 if (restore_info) {
4389 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), TRUE);
4390 }
4391 if (restore_playlist) {
4392 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist), TRUE);
4393 }
4394 skip_fixed_allocation_on_show = FALSE;
4395 gtk_window_resize(GTK_WINDOW(window), last_window_width, last_window_height);
4396
4397 } else {
4398 gtk_window_get_size(GTK_WINDOW(window), &last_window_width, &last_window_height);
4399 gtk_widget_hide(menubar);
4400 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_controls))) {
4401 gtk_widget_hide(controls_box);
4402 }
4403 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_details))) {
4404 restore_details = TRUE;
4405 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_details), FALSE);
4406 } else {
4407 restore_details = FALSE;
4408 }
4409 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_meter))) {
4410 restore_meter = TRUE;
4411 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_meter), FALSE);
4412 } else {
4413 restore_meter = FALSE;
4414 }
4415 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_info))) {
4416 restore_info = TRUE;
4417 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), FALSE);
4418 } else {
4419 restore_info = FALSE;
4420 }
4421 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist))) {
4422 restore_playlist = TRUE;
4423 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist), FALSE);
4424 } else {
4425 restore_playlist = FALSE;
4426 }
4427 if (embed_window == 0) {
4428 // --fullscreen option doesn' t work without this event flush gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
4429 while (gtk_events_pending())
4430 gtk_main_iteration();
4431
4432 gtk_window_fullscreen(GTK_WINDOW(window));
4433 } else {
4434 if (fs_window == NULL) {
4435 fs_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
4436 gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
4437 gtk_widget_add_events(fs_window, GDK_BUTTON_PRESS_MASK);
4438 gtk_widget_add_events(fs_window, GDK_BUTTON_RELEASE_MASK);
4439 gtk_widget_add_events(fs_window, GDK_KEY_PRESS_MASK);
4440 gtk_widget_add_events(fs_window, GDK_KEY_RELEASE_MASK);
4441 gtk_widget_add_events(fs_window, GDK_ENTER_NOTIFY_MASK);
4442 gtk_widget_add_events(fs_window, GDK_LEAVE_NOTIFY_MASK);
4443 gtk_widget_add_events(fs_window, GDK_KEY_PRESS_MASK);
4444 gtk_widget_add_events(fs_window, GDK_VISIBILITY_NOTIFY_MASK);
4445 gtk_widget_add_events(fs_window, GDK_STRUCTURE_MASK);
4446 gtk_widget_add_events(fs_window, GDK_POINTER_MOTION_MASK);
4447 g_signal_connect(G_OBJECT(fs_window), "key_press_event", G_CALLBACK(window_key_callback), NULL);
4448 g_signal_connect(G_OBJECT(fs_window), "motion_notify_event", G_CALLBACK(motion_notify_callback), NULL);
4449 gtk_widget_realize(fs_window);
4450 #ifdef GTK2_18_ENABLED
4451 gdk_window_ensure_native(gtk_widget_get_window(fs_window));
4452 #else
4453 #ifdef GTK2_14_ENABLED
4454 #ifdef X11_ENABLED
4455 GDK_WINDOW_XID(gmtk_get_window(GTK_WIDGET(fs_window)));
4456 #endif
4457 #endif
4458 #endif
4459 }
4460
4461 screen = gtk_window_get_screen(GTK_WINDOW(window));
4462 gtk_window_set_screen(GTK_WINDOW(fs_window), screen);
4463 gtk_window_set_title(GTK_WINDOW(fs_window), _("Gnome MPlayer Fullscreen"));
4464 gdk_screen_get_monitor_geometry(screen,
4465 gdk_screen_get_monitor_at_window(screen, gmtk_get_window(window)), &rect);
4466
4467 gdk_window_get_root_origin(gmtk_get_window(window), &wx, &wy);
4468 gtk_window_move(GTK_WINDOW(fs_window), wx, wy);
4469 #ifdef GTK3_ENABLED
4470 gtk_window_set_has_resize_grip(GTK_WINDOW(fs_window), FALSE);
4471 #endif
4472 gtk_widget_show(fs_window);
4473 #if X11_ENABLED
4474 XReparentWindow(GDK_WINDOW_XDISPLAY(gmtk_get_window(window)),
4475 GDK_WINDOW_XID(gmtk_get_window(window)), GDK_WINDOW_XID(gmtk_get_window(fs_window)), 0, 0);
4476 #else
4477 gdk_window_reparent(gmtk_get_window(window), gmtk_get_window(fs_window), 0, 0);
4478 #endif
4479 gtk_widget_map(window);
4480 gtk_window_fullscreen(GTK_WINDOW(fs_window));
4481 gtk_window_resize(GTK_WINDOW(window), rect.width, rect.height);
4482 if (window_x < 250) {
4483 gtk_widget_show(fs_event_box);
4484 }
4485 if (window_x < 170) {
4486 gtk_widget_show(GTK_WIDGET(tracker));
4487 }
4488 }
4489 }
4490
4491 fullscreen = !fullscreen;
4492 if (!fullscreen) {
4493 hide_fs_controls();
4494 gtk_window_present(GTK_WINDOW(window));
4495 }
4496
4497 }
4498
menuitem_copyurl_callback(GtkMenuItem * menuitem,void * data)4499 void menuitem_copyurl_callback(GtkMenuItem * menuitem, void *data)
4500 {
4501 GtkClipboard *clipboard;
4502 gchar *url;
4503
4504 if (idledata->url) {
4505 url = g_strdup(idledata->url);
4506 } else {
4507 url = g_strdup(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)));
4508 }
4509 clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
4510 gtk_clipboard_set_text(clipboard, url, -1);
4511 clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD);
4512 gtk_clipboard_set_text(clipboard, url, -1);
4513
4514 g_free(url);
4515 }
4516
menuitem_showcontrols_callback(GtkCheckMenuItem * menuitem,void * data)4517 void menuitem_showcontrols_callback(GtkCheckMenuItem * menuitem, void *data)
4518 {
4519 int width, height;
4520 GtkAllocation alloc;
4521
4522 if (GTK_CHECK_MENU_ITEM(menuitem) == GTK_CHECK_MENU_ITEM(menuitem_view_controls)) {
4523 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols),
4524 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_controls)));
4525 return;
4526 } else {
4527 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_controls),
4528 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols)));
4529 }
4530
4531 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols))) {
4532 if (GTK_IS_WIDGET(button_event_box)) {
4533 gtk_widget_hide(button_event_box);
4534 }
4535
4536 if (fullscreen) {
4537 show_fs_controls();
4538 } else {
4539 gtk_widget_set_size_request(controls_box, -1, -1);
4540 gtk_widget_show(controls_box);
4541 if (!fullscreen && embed_window == 0) {
4542 gtk_window_get_size(GTK_WINDOW(window), &width, &height);
4543 gmtk_get_allocation(controls_box, &alloc);
4544 gtk_window_resize(GTK_WINDOW(window), width, height + alloc.height);
4545 }
4546 }
4547
4548 showcontrols = TRUE;
4549 } else {
4550 if (fullscreen) {
4551 hide_fs_controls();
4552 } else {
4553 gtk_widget_hide(controls_box);
4554 if (!fullscreen && embed_window == 0) {
4555 gtk_window_get_size(GTK_WINDOW(window), &width, &height);
4556 gmtk_get_allocation(controls_box, &alloc);
4557 gtk_window_resize(GTK_WINDOW(window), width, height - alloc.height);
4558 }
4559 }
4560 showcontrols = FALSE;
4561 }
4562 }
4563
config_apply(GtkWidget * widget,void * data)4564 void config_apply(GtkWidget * widget, void *data)
4565 {
4566 gint oldosd;
4567 gboolean old_disable_framedrop;
4568 gchar *filename;
4569 GdkColor sub_color;
4570
4571 if (vo != NULL) {
4572 g_free(vo);
4573 vo = NULL;
4574 }
4575 vo = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(config_vo)))));
4576
4577 audio_device_name = g_strdup(gmtk_output_combo_box_get_active_description(GMTK_OUTPUT_COMBO_BOX(config_ao)));
4578
4579 if (audio_device.description != NULL) {
4580 g_free(audio_device.description);
4581 audio_device.description = NULL;
4582 }
4583 audio_device.description = g_strdup(audio_device_name);
4584 gm_audio_update_device(&audio_device);
4585 if (softvol || audio_device.type == AUDIO_TYPE_SOFTVOL) {
4586 gm_audio_set_server_volume_update_callback(&audio_device, NULL);
4587 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SOFTVOL, TRUE);
4588 } else {
4589 gm_audio_get_volume(&audio_device);
4590 gm_audio_set_server_volume_update_callback(&audio_device, set_volume);
4591 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SOFTVOL, FALSE);
4592 }
4593
4594 gmtk_media_player_set_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AO, audio_device.mplayer_ao);
4595
4596 #ifdef HAVE_ASOUNDLIB
4597 if (audio_device.alsa_mixer != NULL) {
4598 g_free(audio_device.alsa_mixer);
4599 audio_device.alsa_mixer = NULL;
4600 }
4601 audio_device.alsa_mixer = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(config_mixer)))));
4602 #endif
4603
4604 if (alang != NULL) {
4605 g_free(alang);
4606 alang = NULL;
4607 }
4608 alang = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(config_alang)))));
4609
4610 if (slang != NULL) {
4611 g_free(slang);
4612 slang = NULL;
4613 }
4614 slang = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(config_slang)))));
4615
4616 if (metadata_codepage != NULL) {
4617 g_free(metadata_codepage);
4618 metadata_codepage = NULL;
4619 }
4620 metadata_codepage = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(config_metadata_codepage)))));
4621
4622 if (subtitle_codepage != NULL) {
4623 g_free(subtitle_codepage);
4624 subtitle_codepage = NULL;
4625 }
4626 subtitle_codepage = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(config_subtitle_codepage)))));
4627
4628 if (mplayer_dvd_device != NULL) {
4629 g_free(mplayer_dvd_device);
4630 mplayer_dvd_device = NULL;
4631 }
4632 mplayer_dvd_device = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(config_mplayer_dvd_device)))));
4633
4634 audio_channels = gtk_combo_box_get_active(GTK_COMBO_BOX(config_audio_channels));
4635 use_hw_audio = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_use_hw_audio));
4636 use_hardware_codecs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_hardware_codecs));
4637 use_crystalhd_codecs = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_crystalhd_codecs));
4638 cache_size = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(config_cachesize));
4639 plugin_audio_cache_size = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(config_plugin_audio_cache_size));
4640 plugin_video_cache_size = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(config_plugin_video_cache_size));
4641 old_disable_framedrop = disable_framedrop;
4642 disable_deinterlace = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_deinterlace));
4643 disable_framedrop = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_framedrop));
4644 disable_ass = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_ass));
4645 disable_embeddedfonts = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_embeddedfonts));
4646 disable_pause_on_click = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_pause_on_click));
4647 disable_animation = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_disable_animation));
4648 disable_cover_art_fetch =
4649 (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_disable_cover_art_fetch));
4650 oldosd = osdlevel;
4651 osdlevel = (gint) gtk_range_get_value(GTK_RANGE(config_osdlevel));
4652 pplevel = (gint) gtk_range_get_value(GTK_RANGE(config_pplevel));
4653 softvol = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_softvol));
4654 remember_softvol = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_remember_softvol));
4655 volume_gain = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(config_volume_gain));
4656 verbose = (gint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_verbose));
4657 mouse_wheel_changes_volume = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_mouse_wheel));
4658 resume_mode = gtk_combo_box_get_active(GTK_COMBO_BOX(config_resume_mode));
4659 playlist_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_playlist_visible));
4660 details_visible = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_details_visible));
4661 use_mediakeys = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_use_mediakeys));
4662 use_defaultpl = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_use_defaultpl));
4663 vertical_layout = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_vertical_layout));
4664 single_instance = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_single_instance));
4665 replace_and_play = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_replace_and_play));
4666 bring_to_front = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_bring_to_front));
4667 enable_nautilus_plugin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_enable_nautilus_plugin));
4668 #ifdef NOTIFY_ENABLED
4669 show_notification = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_show_notification));
4670 #endif
4671 #ifdef GTK2_12_ENABLED
4672 show_status_icon = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_show_status_icon));
4673 if (GTK_IS_STATUS_ICON(status_icon)) {
4674 gtk_status_icon_set_visible(status_icon, show_status_icon);
4675 } else {
4676 if (show_status_icon) {
4677 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
4678 if (gtk_icon_theme_has_icon(icon_theme, "gnome-mplayer")) {
4679 status_icon = gtk_status_icon_new_from_icon_name("gnome-mplayer");
4680 } else {
4681 status_icon = gtk_status_icon_new_from_pixbuf(pb_icon);
4682 }
4683 gtk_status_icon_set_visible(status_icon, show_status_icon);
4684 g_signal_connect(status_icon, "activate", G_CALLBACK(status_icon_callback), NULL);
4685 g_signal_connect(status_icon, "popup_menu", G_CALLBACK(status_icon_context_callback), NULL);
4686
4687 } else {
4688 if (GTK_IS_STATUS_ICON(status_icon)) {
4689 gtk_status_icon_set_visible(status_icon, show_status_icon);
4690 }
4691 }
4692 }
4693
4694 #endif
4695 forcecache = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_forcecache));
4696 remember_loc = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_remember_loc));
4697 disable_cover_art_fetch =
4698 (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_disable_cover_art_fetch));
4699 resize_on_new_media = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_resize_on_new_media));
4700 keep_on_top = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_keep_on_top));
4701 gtk_window_set_keep_above(GTK_WINDOW(window), keep_on_top);
4702
4703 if (subtitlefont != NULL) {
4704 g_free(subtitlefont);
4705 subtitlefont = NULL;
4706 }
4707 subtitlefont = g_strdup(gtk_font_button_get_font_name(GTK_FONT_BUTTON(config_subtitle_font)));
4708 subtitle_scale = gtk_spin_button_get_value(GTK_SPIN_BUTTON(config_subtitle_scale));
4709 gtk_color_button_get_color(GTK_COLOR_BUTTON(config_subtitle_color), &sub_color);
4710 if (subtitle_color != NULL) {
4711 g_free(subtitle_color);
4712 subtitle_color = NULL;
4713 }
4714 subtitle_color = g_strdup_printf("%02x%02x%02x00", sub_color.red >> 8, sub_color.green >> 8, sub_color.blue >> 8);
4715 subtitle_outline = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_subtitle_outline));
4716 subtitle_shadow = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_subtitle_shadow));
4717 subtitle_margin = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(config_subtitle_margin));
4718 subtitle_fuzziness = (gint) gtk_range_get_value(GTK_RANGE(config_subtitle_fuzziness));
4719 showsubtitles = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_show_subtitles));
4720
4721 if (old_disable_framedrop != disable_framedrop) {
4722 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ENABLE_FRAME_DROP,
4723 !disable_framedrop);
4724 }
4725
4726 if (oldosd != osdlevel) {
4727 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_OSDLEVEL, osdlevel);
4728 }
4729
4730 qt_disabled = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_qt));
4731 real_disabled = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_real));
4732 wmp_disabled = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_wmp));
4733 dvx_disabled = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_dvx));
4734 midi_disabled = !(gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_midi));
4735 embedding_disabled = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_noembed));
4736 disable_embedded_scaling = (gboolean) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_noscaling));
4737 mplayer_bin = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(config_mplayer_bin)));
4738 if (!g_file_test(mplayer_bin, G_FILE_TEST_EXISTS)) {
4739 g_free(mplayer_bin);
4740 mplayer_bin = NULL;
4741 }
4742 extraopts = g_strdup(gtk_entry_get_text(GTK_ENTRY(config_extraopts)));
4743
4744 set_media_player_attributes(media);
4745
4746 gm_store = gm_pref_store_new("gnome-mplayer");
4747
4748 gm_pref_store_set_string(gm_store, AUDIO_DEVICE_NAME, audio_device_name);
4749
4750 #ifndef HAVE_ASOUNDLIB
4751 gm_pref_store_set_int(gm_store, VOLUME, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(config_volume)));
4752 #endif
4753 gm_pref_store_set_string(gm_store, VO, vo);
4754 gm_pref_store_set_int(gm_store, AUDIO_CHANNELS, audio_channels);
4755 gm_pref_store_set_boolean(gm_store, USE_HW_AUDIO, use_hw_audio);
4756 gm_pref_store_set_boolean(gm_store, USE_HARDWARE_CODECS, use_hardware_codecs);
4757 gm_pref_store_set_boolean(gm_store, USE_CRYSTALHD_CODECS, use_crystalhd_codecs);
4758 gm_pref_store_set_int(gm_store, CACHE_SIZE, cache_size);
4759 gm_pref_store_set_int(gm_store, PLUGIN_AUDIO_CACHE_SIZE, plugin_audio_cache_size);
4760 gm_pref_store_set_int(gm_store, PLUGIN_VIDEO_CACHE_SIZE, plugin_video_cache_size);
4761 gm_pref_store_set_string(gm_store, ALSA_MIXER, audio_device.alsa_mixer);
4762 gm_pref_store_set_int(gm_store, OSDLEVEL, osdlevel);
4763 gm_pref_store_set_int(gm_store, PPLEVEL, pplevel);
4764 gm_pref_store_set_boolean(gm_store, SOFTVOL, softvol);
4765 gm_pref_store_set_boolean(gm_store, REMEMBER_SOFTVOL, remember_softvol);
4766 gm_pref_store_set_int(gm_store, VOLUME_GAIN, volume_gain);
4767 gm_pref_store_set_boolean(gm_store, FORCECACHE, forcecache);
4768 gm_pref_store_set_boolean(gm_store, DISABLEASS, disable_ass);
4769 gm_pref_store_set_boolean(gm_store, DISABLEEMBEDDEDFONTS, disable_embeddedfonts);
4770 gm_pref_store_set_boolean(gm_store, DISABLEDEINTERLACE, disable_deinterlace);
4771 gm_pref_store_set_boolean(gm_store, DISABLEFRAMEDROP, disable_framedrop);
4772 gm_pref_store_set_boolean(gm_store, DISABLEPAUSEONCLICK, disable_pause_on_click);
4773 gm_pref_store_set_boolean(gm_store, DISABLEANIMATION, disable_animation);
4774 gm_pref_store_set_boolean(gm_store, SHOWPLAYLIST, playlist_visible);
4775 gm_pref_store_set_boolean(gm_store, SHOWDETAILS, details_visible);
4776 gm_pref_store_set_boolean(gm_store, USE_MEDIAKEYS, use_mediakeys);
4777 gm_pref_store_set_boolean(gm_store, USE_DEFAULTPL, use_defaultpl);
4778 gm_pref_store_set_boolean(gm_store, MOUSE_WHEEL_CHANGES_VOLUME, mouse_wheel_changes_volume);
4779 gm_pref_store_set_boolean(gm_store, SHOW_NOTIFICATION, show_notification);
4780 gm_pref_store_set_boolean(gm_store, SHOW_STATUS_ICON, show_status_icon);
4781 gm_pref_store_set_boolean(gm_store, VERTICAL, vertical_layout);
4782 gm_pref_store_set_boolean(gm_store, SINGLE_INSTANCE, single_instance);
4783 gm_pref_store_set_boolean(gm_store, REPLACE_AND_PLAY, replace_and_play);
4784 gm_pref_store_set_boolean(gm_store, BRING_TO_FRONT, bring_to_front);
4785 gm_pref_store_set_boolean(gm_store, REMEMBER_LOC, remember_loc);
4786 gm_pref_store_set_boolean(gm_store, DISABLE_COVER_ART_FETCH, disable_cover_art_fetch);
4787 gm_pref_store_set_boolean(gm_store, KEEP_ON_TOP, keep_on_top);
4788 gm_pref_store_set_boolean(gm_store, ENABLE_NAUTILUS_PLUGIN, enable_nautilus_plugin);
4789 gm_pref_store_set_boolean(gm_store, RESIZE_ON_NEW_MEDIA, resize_on_new_media);
4790 gm_pref_store_set_int(gm_store, RESUME_MODE, resume_mode);
4791 gm_pref_store_set_int(gm_store, VERBOSE, verbose);
4792 gm_pref_store_set_string(gm_store, METADATACODEPAGE, metadata_codepage);
4793 gm_pref_store_set_string(gm_store, SUBTITLEFONT, subtitlefont);
4794 gm_pref_store_set_float(gm_store, SUBTITLESCALE, subtitle_scale);
4795 gm_pref_store_set_string(gm_store, SUBTITLECODEPAGE, subtitle_codepage);
4796 gm_pref_store_set_string(gm_store, SUBTITLECOLOR, subtitle_color);
4797 gm_pref_store_set_boolean(gm_store, SUBTITLEOUTLINE, subtitle_outline);
4798 gm_pref_store_set_boolean(gm_store, SUBTITLESHADOW, subtitle_shadow);
4799 gm_pref_store_set_int(gm_store, SUBTITLE_MARGIN, subtitle_margin);
4800 gm_pref_store_set_boolean(gm_store, SHOW_SUBTITLES, showsubtitles);
4801
4802 gm_pref_store_set_string(gm_store, AUDIO_LANG, alang);
4803 gm_pref_store_set_string(gm_store, SUBTITLE_LANG, slang);
4804
4805 gm_pref_store_set_string(gm_store, MPLAYER_BIN, mplayer_bin);
4806 gm_pref_store_set_string(gm_store, MPLAYER_DVD_DEVICE, mplayer_dvd_device);
4807 gm_pref_store_set_string(gm_store, EXTRAOPTS, extraopts);
4808 gm_pref_store_set_string(gm_store, ACCELERATOR_KEYS, g_strjoinv(" ", accel_keys));
4809 gm_pref_store_free(gm_store);
4810
4811 gmp_store = gm_pref_store_new("gecko-mediaplayer");
4812 gm_pref_store_set_boolean(gmp_store, DISABLE_QT, qt_disabled);
4813 gm_pref_store_set_boolean(gmp_store, DISABLE_REAL, real_disabled);
4814 gm_pref_store_set_boolean(gmp_store, DISABLE_WMP, wmp_disabled);
4815 gm_pref_store_set_boolean(gmp_store, DISABLE_DVX, dvx_disabled);
4816 gm_pref_store_set_boolean(gmp_store, DISABLE_MIDI, midi_disabled);
4817 gm_pref_store_set_boolean(gmp_store, DISABLE_EMBEDDING, embedding_disabled);
4818 gm_pref_store_set_boolean(gmp_store, DISABLE_EMBEDDED_SCALING, disable_embedded_scaling);
4819 gm_pref_store_set_int(gmp_store, DEBUG_LEVEL, verbose);
4820
4821 gm_pref_store_free(gmp_store);
4822
4823 filename = g_strdup_printf("%s/.mozilla/pluginreg.dat", g_getenv("HOME"));
4824 g_remove(filename);
4825 g_free(filename);
4826 filename = g_strdup_printf("%s/.firefox/pluginreg.dat", g_getenv("HOME"));
4827 g_remove(filename);
4828 g_free(filename);
4829 filename = g_strdup_printf("%s/.mozilla/firefox/pluginreg.dat", g_getenv("HOME"));
4830 g_remove(filename);
4831 g_free(filename);
4832
4833 // don't reload plugins when running in plugin mode
4834 if (embed_window == 0 && control_id == 0)
4835 dbus_reload_plugins();
4836
4837 gmtk_media_player_restart(GMTK_MEDIA_PLAYER(media));
4838 gtk_widget_destroy(widget);
4839 }
4840
adv_reset_values(GtkWidget * widget,void * data)4841 void adv_reset_values(GtkWidget * widget, void *data)
4842 {
4843 gtk_range_set_value(GTK_RANGE(adv_brightness), 0);
4844 gtk_range_set_value(GTK_RANGE(adv_contrast), 0);
4845 gtk_range_set_value(GTK_RANGE(adv_hue), 0);
4846 gtk_range_set_value(GTK_RANGE(adv_gamma), 0);
4847 gtk_range_set_value(GTK_RANGE(adv_saturation), 0);
4848 }
4849
4850
config_close(GtkWidget * widget,void * data)4851 void config_close(GtkWidget * widget, void *data)
4852 {
4853 selection = NULL;
4854 if (GTK_IS_WIDGET(widget))
4855 gtk_widget_destroy(widget);
4856 }
4857
brightness_callback(GtkRange * range,gpointer data)4858 void brightness_callback(GtkRange * range, gpointer data)
4859 {
4860 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_BRIGHTNESS,
4861 (gint) gtk_range_get_value(range));
4862 }
4863
contrast_callback(GtkRange * range,gpointer data)4864 void contrast_callback(GtkRange * range, gpointer data)
4865 {
4866 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_CONTRAST,
4867 (gint) gtk_range_get_value(range));
4868 }
4869
gamma_callback(GtkRange * range,gpointer data)4870 void gamma_callback(GtkRange * range, gpointer data)
4871 {
4872 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_GAMMA,
4873 (gint) gtk_range_get_value(range));
4874 }
4875
hue_callback(GtkRange * range,gpointer data)4876 void hue_callback(GtkRange * range, gpointer data)
4877 {
4878 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HUE, (gint) gtk_range_get_value(range));
4879 }
4880
saturation_callback(GtkRange * range,gpointer data)4881 void saturation_callback(GtkRange * range, gpointer data)
4882 {
4883 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SATURATION,
4884 (gint) gtk_range_get_value(range));
4885 }
4886
menuitem_meter_callback(GtkMenuItem * menuitem,void * data)4887 void menuitem_meter_callback(GtkMenuItem * menuitem, void *data)
4888 {
4889 g_idle_add(set_adjust_layout, NULL);
4890 //adjust_layout();
4891 }
4892
menuitem_details_callback(GtkMenuItem * menuitem,void * data)4893 void menuitem_details_callback(GtkMenuItem * menuitem, void *data)
4894 {
4895 g_idle_add(set_adjust_layout, NULL);
4896
4897 }
4898
create_details_table()4899 void create_details_table()
4900 {
4901 GtkWidget *label;
4902 gchar *buf;
4903 gint i = 0;
4904 IdleData *idle = idledata;
4905
4906 label = gtk_label_new(_("<span weight=\"bold\">Video Details</span>"));
4907 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
4908 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4909 gtk_misc_set_padding(GTK_MISC(label), 0, 6);
4910 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4911 i++;
4912
4913 if (idle != NULL) {
4914 label = gtk_label_new(_("Video Size:"));
4915 gtk_widget_set_size_request(label, 150, -1);
4916 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4917 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
4918 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4919 buf = g_strdup_printf("%i x %i", idle->width, idle->height);
4920 details_video_size = gtk_label_new(buf);
4921 gtk_widget_set_size_request(details_video_size, 100, -1);
4922 gtk_misc_set_alignment(GTK_MISC(details_video_size), 0.0, 0.0);
4923 gtk_table_attach_defaults(GTK_TABLE(details_table), details_video_size, 1, 2, i, i + 1);
4924 g_free(buf);
4925 i++;
4926 }
4927
4928 label = gtk_label_new(_("Video Format:"));
4929 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4930 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
4931 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4932 buf = g_strdup_printf(_("Unknown"));
4933 details_video_format = gtk_label_new(buf);
4934 g_free(buf);
4935 gtk_misc_set_alignment(GTK_MISC(details_video_format), 0.0, 0.0);
4936 gtk_table_attach_defaults(GTK_TABLE(details_table), details_video_format, 1, 2, i, i + 1);
4937 i++;
4938
4939 label = gtk_label_new(_("Video Codec:"));
4940 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4941 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
4942 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4943 buf = g_strdup_printf(_("Unknown"));
4944 details_video_codec = gtk_label_new(buf);
4945 g_free(buf);
4946 gtk_misc_set_alignment(GTK_MISC(details_video_codec), 0.0, 0.0);
4947 gtk_table_attach_defaults(GTK_TABLE(details_table), details_video_codec, 1, 2, i, i + 1);
4948 i++;
4949
4950 label = gtk_label_new(_("Video FPS:"));
4951 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4952 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
4953 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4954 details_video_fps = gtk_label_new("");
4955 gtk_misc_set_alignment(GTK_MISC(details_video_fps), 0.0, 0.0);
4956 gtk_table_attach_defaults(GTK_TABLE(details_table), details_video_fps, 1, 2, i, i + 1);
4957 i++;
4958
4959 label = gtk_label_new(_("Video Bitrate:"));
4960 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4961 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
4962 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4963 buf = g_strdup_printf("0 Kb/s");
4964 details_video_bitrate = gtk_label_new(buf);
4965 g_free(buf);
4966 gtk_misc_set_alignment(GTK_MISC(details_video_bitrate), 0.0, 0.0);
4967 gtk_table_attach_defaults(GTK_TABLE(details_table), details_video_bitrate, 1, 2, i, i + 1);
4968 i++;
4969
4970 label = gtk_label_new(_("Video Chapters:"));
4971 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4972 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
4973 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4974 buf = g_strdup_printf(_("Unknown"));
4975 details_video_chapters = gtk_label_new(buf);
4976 g_free(buf);
4977 gtk_misc_set_alignment(GTK_MISC(details_video_chapters), 0.0, 0.0);
4978 gtk_table_attach_defaults(GTK_TABLE(details_table), details_video_chapters, 1, 2, i, i + 1);
4979 i++;
4980
4981 label = gtk_label_new("");
4982 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4983 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4984 i++;
4985
4986 label = gtk_label_new(_("<span weight=\"bold\">Audio Details</span>"));
4987 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
4988 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4989 gtk_misc_set_padding(GTK_MISC(label), 0, 6);
4990 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4991 i++;
4992
4993 label = gtk_label_new(_("Audio Format:"));
4994 gtk_widget_set_size_request(label, 150, -1);
4995 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
4996 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
4997 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
4998 buf = g_strdup_printf(_("Unknown"));
4999 details_audio_format = gtk_label_new(buf);
5000 g_free(buf);
5001 gtk_widget_set_size_request(details_audio_format, 100, -1);
5002 gtk_misc_set_alignment(GTK_MISC(details_audio_format), 0.0, 0.0);
5003 gtk_table_attach_defaults(GTK_TABLE(details_table), details_audio_format, 1, 2, i, i + 1);
5004 i++;
5005
5006 label = gtk_label_new(_("Audio Codec:"));
5007 gtk_widget_set_size_request(label, 150, -1);
5008 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
5009 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5010 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
5011 buf = g_strdup_printf(_("Unknown"));
5012 details_audio_codec = gtk_label_new(buf);
5013 g_free(buf);
5014 gtk_widget_set_size_request(details_audio_codec, 100, -1);
5015 gtk_misc_set_alignment(GTK_MISC(details_audio_codec), 0.0, 0.0);
5016 gtk_table_attach_defaults(GTK_TABLE(details_table), details_audio_codec, 1, 2, i, i + 1);
5017 i++;
5018
5019 label = gtk_label_new(_("Audio Channels:"));
5020 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
5021 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5022 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
5023 if (idle != NULL) {
5024 buf = g_strdup_printf(_("Unknown"));
5025 details_audio_channels = gtk_label_new(buf);
5026 g_free(buf);
5027 gtk_misc_set_alignment(GTK_MISC(details_audio_channels), 0.0, 0.0);
5028 gtk_table_attach_defaults(GTK_TABLE(details_table), details_audio_channels, 1, 2, i, i + 1);
5029 }
5030 i++;
5031
5032 label = gtk_label_new(_("Audio Bitrate:"));
5033 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
5034 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5035 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
5036 if (idle != NULL) {
5037 buf = g_strdup_printf("0 Kb/s");
5038 details_audio_bitrate = gtk_label_new(buf);
5039 g_free(buf);
5040 gtk_misc_set_alignment(GTK_MISC(details_audio_bitrate), 0.0, 0.0);
5041 gtk_table_attach_defaults(GTK_TABLE(details_table), details_audio_bitrate, 1, 2, i, i + 1);
5042 }
5043 i++;
5044
5045 label = gtk_label_new(_("Audio Sample Rate:"));
5046 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
5047 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5048 gtk_table_attach_defaults(GTK_TABLE(details_table), label, 0, 1, i, i + 1);
5049 if (idle != NULL) {
5050 buf = g_strdup_printf("0 KHz");
5051 details_audio_samplerate = gtk_label_new(buf);
5052 g_free(buf);
5053 gtk_misc_set_alignment(GTK_MISC(details_audio_samplerate), 0.0, 0.0);
5054 gtk_table_attach_defaults(GTK_TABLE(details_table), details_audio_samplerate, 1, 2, i, i + 1);
5055 }
5056 i++;
5057
5058 }
5059
5060
menuitem_advanced_callback(GtkMenuItem * menuitem,void * data)5061 void menuitem_advanced_callback(GtkMenuItem * menuitem, void *data)
5062 {
5063 GtkWidget *adv_window;
5064 GtkWidget *adv_vbox;
5065 GtkWidget *adv_hbutton_box;
5066 GtkWidget *adv_table;
5067 GtkWidget *adv_reset;
5068 GtkWidget *adv_close;
5069 GtkWidget *label;
5070 gint i = 0;
5071
5072 adv_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
5073 gtk_window_set_type_hint(GTK_WINDOW(adv_window), GDK_WINDOW_TYPE_HINT_UTILITY);
5074 gtk_window_set_resizable(GTK_WINDOW(adv_window), FALSE);
5075 gtk_window_set_icon(GTK_WINDOW(adv_window), pb_icon);
5076 gtk_window_set_transient_for(GTK_WINDOW(adv_window), GTK_WINDOW(window));
5077 gtk_window_set_position(GTK_WINDOW(adv_window), GTK_WIN_POS_CENTER_ON_PARENT);
5078
5079 gtk_window_set_title(GTK_WINDOW(adv_window), _("Video Picture Adjustments"));
5080
5081 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5082 adv_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5083 gtk_box_set_homogeneous(GTK_BOX(adv_vbox), FALSE);
5084 #else
5085 adv_vbox = gtk_vbox_new(FALSE, 10);
5086 #endif
5087 adv_hbutton_box = gtk_hbutton_box_new();
5088 gtk_button_box_set_layout(GTK_BUTTON_BOX(adv_hbutton_box), GTK_BUTTONBOX_END);
5089 adv_table = gtk_table_new(20, 2, FALSE);
5090
5091 gtk_container_add(GTK_CONTAINER(adv_vbox), adv_table);
5092 gtk_container_add(GTK_CONTAINER(adv_vbox), adv_hbutton_box);
5093 gtk_container_add(GTK_CONTAINER(adv_window), adv_vbox);
5094
5095 gtk_container_set_border_width(GTK_CONTAINER(adv_window), 5);
5096
5097 label = gtk_label_new(_("<span weight=\"bold\">Video Picture Adjustments</span>"));
5098 gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
5099 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
5100 gtk_misc_set_padding(GTK_MISC(label), 0, 6);
5101 gtk_table_attach_defaults(GTK_TABLE(adv_table), label, 0, 1, i, i + 1);
5102 i++;
5103
5104 label = gtk_label_new(_("Brightness"));
5105 adv_brightness = gtk_hscale_new_with_range(-100.0, 100.0, 1.0);
5106 gtk_widget_set_size_request(adv_brightness, 200, -1);
5107 gtk_range_set_value(GTK_RANGE(adv_brightness),
5108 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_BRIGHTNESS));
5109 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
5110 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5111 gtk_table_attach_defaults(GTK_TABLE(adv_table), label, 0, 1, i, i + 1);
5112 gtk_table_attach_defaults(GTK_TABLE(adv_table), adv_brightness, 1, 2, i, i + 1);
5113 i++;
5114
5115 label = gtk_label_new(_("Contrast"));
5116 adv_contrast = gtk_hscale_new_with_range(-100.0, 100.0, 1.0);
5117 gtk_widget_set_size_request(adv_contrast, 200, -1);
5118 gtk_range_set_value(GTK_RANGE(adv_contrast),
5119 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_CONTRAST));
5120 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
5121 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5122 gtk_table_attach_defaults(GTK_TABLE(adv_table), label, 0, 1, i, i + 1);
5123 gtk_table_attach_defaults(GTK_TABLE(adv_table), adv_contrast, 1, 2, i, i + 1);
5124 i++;
5125
5126 label = gtk_label_new(_("Gamma"));
5127 adv_gamma = gtk_hscale_new_with_range(-100.0, 100.0, 1.0);
5128 gtk_widget_set_size_request(adv_gamma, 200, -1);
5129 gtk_range_set_value(GTK_RANGE(adv_gamma),
5130 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_GAMMA));
5131 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
5132 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5133 gtk_table_attach_defaults(GTK_TABLE(adv_table), label, 0, 1, i, i + 1);
5134 gtk_table_attach_defaults(GTK_TABLE(adv_table), adv_gamma, 1, 2, i, i + 1);
5135 i++;
5136
5137 label = gtk_label_new(_("Hue"));
5138 adv_hue = gtk_hscale_new_with_range(-100.0, 100.0, 1.0);
5139 gtk_widget_set_size_request(adv_hue, 200, -1);
5140 gtk_range_set_value(GTK_RANGE(adv_hue),
5141 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HUE));
5142 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
5143 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5144 gtk_table_attach_defaults(GTK_TABLE(adv_table), label, 0, 1, i, i + 1);
5145 gtk_table_attach_defaults(GTK_TABLE(adv_table), adv_hue, 1, 2, i, i + 1);
5146 i++;
5147
5148 label = gtk_label_new(_("Saturation"));
5149 adv_saturation = gtk_hscale_new_with_range(-100.0, 100.0, 1.0);
5150 gtk_widget_set_size_request(adv_saturation, 200, -1);
5151 gtk_range_set_value(GTK_RANGE(adv_saturation),
5152 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SATURATION));
5153 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 1.0);
5154 gtk_misc_set_padding(GTK_MISC(label), 12, 0);
5155 gtk_table_attach_defaults(GTK_TABLE(adv_table), label, 0, 1, i, i + 1);
5156 gtk_table_attach_defaults(GTK_TABLE(adv_table), adv_saturation, 1, 2, i, i + 1);
5157 i++;
5158
5159 g_signal_connect(G_OBJECT(adv_brightness), "value_changed", G_CALLBACK(brightness_callback), idledata);
5160 g_signal_connect(G_OBJECT(adv_contrast), "value_changed", G_CALLBACK(contrast_callback), idledata);
5161 g_signal_connect(G_OBJECT(adv_gamma), "value_changed", G_CALLBACK(gamma_callback), idledata);
5162 g_signal_connect(G_OBJECT(adv_hue), "value_changed", G_CALLBACK(hue_callback), idledata);
5163 g_signal_connect(G_OBJECT(adv_saturation), "value_changed", G_CALLBACK(saturation_callback), idledata);
5164
5165 adv_reset = gtk_button_new_with_mnemonic(_("_Reset"));
5166 g_signal_connect(G_OBJECT(adv_reset), "clicked", G_CALLBACK(adv_reset_values), NULL);
5167 gtk_container_add(GTK_CONTAINER(adv_hbutton_box), adv_reset);
5168
5169 adv_close = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
5170 g_signal_connect_swapped(G_OBJECT(adv_close), "clicked", G_CALLBACK(config_close), adv_window);
5171
5172 gtk_container_add(GTK_CONTAINER(adv_hbutton_box), adv_close);
5173 gtk_widget_show_all(adv_window);
5174 gtk_window_set_transient_for(GTK_WINDOW(adv_window), GTK_WINDOW(window));
5175 gtk_window_set_keep_above(GTK_WINDOW(adv_window), keep_on_top);
5176 gtk_window_present(GTK_WINDOW(adv_window));
5177 }
5178
menuitem_view_angle_callback(GtkMenuItem * menuitem,gpointer data)5179 void menuitem_view_angle_callback(GtkMenuItem * menuitem, gpointer data)
5180 {
5181 gmtk_media_player_send_command(GMTK_MEDIA_PLAYER(media), COMMAND_SWITCH_ANGLE);
5182 return;
5183 }
5184
menuitem_view_smaller_subtitle_callback(GtkMenuItem * menuitem,void * data)5185 void menuitem_view_smaller_subtitle_callback(GtkMenuItem * menuitem, void *data)
5186 {
5187
5188 subtitle_scale -= 0.2;
5189 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_SCALE, subtitle_scale);
5190
5191 return;
5192 }
5193
menuitem_view_larger_subtitle_callback(GtkMenuItem * menuitem,void * data)5194 void menuitem_view_larger_subtitle_callback(GtkMenuItem * menuitem, void *data)
5195 {
5196 subtitle_scale += 0.2;
5197 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_SCALE, subtitle_scale);
5198
5199 return;
5200 }
5201
menuitem_view_decrease_subtitle_delay_callback(GtkMenuItem * menuitem,void * data)5202 void menuitem_view_decrease_subtitle_delay_callback(GtkMenuItem * menuitem, void *data)
5203 {
5204 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_DELAY,
5205 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
5206 ATTRIBUTE_SUBTITLE_DELAY) - 0.1);
5207 return;
5208
5209 }
5210
menuitem_view_increase_subtitle_delay_callback(GtkMenuItem * menuitem,void * data)5211 void menuitem_view_increase_subtitle_delay_callback(GtkMenuItem * menuitem, void *data)
5212 {
5213 gmtk_media_player_set_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE_DELAY,
5214 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media),
5215 ATTRIBUTE_SUBTITLE_DELAY) + 0.1);
5216 return;
5217
5218 }
5219
menuitem_view_aspect_callback(GtkMenuItem * menuitem,void * data)5220 void menuitem_view_aspect_callback(GtkMenuItem * menuitem, void *data)
5221 {
5222 static gint i = 0;
5223 GmtkMediaPlayerAspectRatio aspect;
5224
5225 if ((gpointer) menuitem == (gpointer) menuitem_view_aspect_default) {
5226 i++;
5227 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three), FALSE);
5228 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine), FALSE);
5229 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten), FALSE);
5230 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_anamorphic), FALSE);
5231 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window), FALSE);
5232 aspect = ASPECT_DEFAULT;
5233 i--;
5234 }
5235
5236 if ((gpointer) menuitem == (gpointer) menuitem_view_aspect_four_three) {
5237 i++;
5238 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), FALSE);
5239 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine), FALSE);
5240 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten), FALSE);
5241 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_anamorphic), FALSE);
5242 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window), FALSE);
5243 aspect = ASPECT_4X3;
5244 i--;
5245 }
5246
5247 if ((gpointer) menuitem == (gpointer) menuitem_view_aspect_sixteen_nine) {
5248 i++;
5249 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), FALSE);
5250 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three), FALSE);
5251 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten), FALSE);
5252 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_anamorphic), FALSE);
5253 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window), FALSE);
5254 aspect = ASPECT_16X9;
5255 i--;
5256 }
5257
5258 if ((gpointer) menuitem == (gpointer) menuitem_view_aspect_sixteen_ten) {
5259 i++;
5260 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), FALSE);
5261 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three), FALSE);
5262 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine), FALSE);
5263 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_anamorphic), FALSE);
5264 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window), FALSE);
5265 aspect = ASPECT_16X10;
5266 i--;
5267 }
5268
5269 if ((gpointer) menuitem == (gpointer) menuitem_view_aspect_anamorphic) {
5270 i++;
5271 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), FALSE);
5272 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three), FALSE);
5273 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine), FALSE);
5274 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten), FALSE);
5275 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_follow_window), FALSE);
5276 aspect = ASPECT_ANAMORPHIC;
5277 i--;
5278 }
5279
5280 if ((gpointer) menuitem == (gpointer) menuitem_view_aspect_follow_window) {
5281 i++;
5282 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), FALSE);
5283 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_four_three), FALSE);
5284 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_nine), FALSE);
5285 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_sixteen_ten), FALSE);
5286 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_anamorphic), FALSE);
5287 aspect = ASPECT_WINDOW;
5288 i--;
5289 }
5290
5291 if (i == 0) {
5292 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
5293 gmtk_media_player_set_aspect(GMTK_MEDIA_PLAYER(media), aspect);
5294 }
5295 }
5296
osdlevel_format_callback(GtkScale * scale,gdouble value)5297 gchar *osdlevel_format_callback(GtkScale * scale, gdouble value)
5298 {
5299 gchar *text;
5300
5301 switch ((gint) value) {
5302
5303 case 0:
5304 text = g_strdup(_("No Display"));
5305 break;
5306 case 1:
5307 text = g_strdup(_("Minimal"));
5308 break;
5309 case 2:
5310 text = g_strdup(_("Timer"));
5311 break;
5312 case 3:
5313 text = g_strdup(_("Timer/Total"));
5314 break;
5315 default:
5316 text = g_strdup("How did we get here?");
5317 }
5318
5319 return text;
5320 }
5321
pplevel_format_callback(GtkScale * scale,gdouble value)5322 gchar *pplevel_format_callback(GtkScale * scale, gdouble value)
5323 {
5324 gchar *text;
5325
5326 switch ((gint) value) {
5327
5328 case 0:
5329 text = g_strdup(_("No Postprocessing"));
5330 break;
5331 case 1:
5332 case 2:
5333 text = g_strdup(_("Minimal Postprocessing"));
5334 break;
5335 case 3:
5336 case 4:
5337 text = g_strdup(_("More Postprocessing"));
5338 break;
5339 case 5:
5340 case 6:
5341 text = g_strdup(_("Maximum Postprocessing"));
5342 break;
5343 default:
5344 text = g_strdup("How did we get here?");
5345 }
5346
5347 return text;
5348 }
5349
subtitle_fuzziness_format_callback(GtkScale * scale,gdouble value)5350 gchar *subtitle_fuzziness_format_callback(GtkScale * scale, gdouble value)
5351 {
5352 gchar *text;
5353
5354 switch ((gint) value) {
5355
5356 case 0:
5357 text = g_strdup(_("Exact Match"));
5358 break;
5359 case 1:
5360 text = g_strdup(_("Load all subtitles containing movie name"));
5361 break;
5362 case 2:
5363 text = g_strdup(_("Load all subtitles in the same folder"));
5364 break;
5365 default:
5366 text = g_strdup("How did we get here?");
5367 }
5368
5369 return text;
5370 }
5371
osdlevel_change_callback(GtkRange * range,gpointer data)5372 void osdlevel_change_callback(GtkRange * range, gpointer data)
5373 {
5374 gmtk_media_player_set_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_OSDLEVEL,
5375 (gint) gtk_range_get_value(range));
5376
5377 return;
5378 }
5379
config_single_instance_callback(GtkWidget * button,gpointer data)5380 void config_single_instance_callback(GtkWidget * button, gpointer data)
5381 {
5382 gtk_widget_set_sensitive(config_replace_and_play,
5383 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_single_instance)));
5384 gtk_widget_set_sensitive(config_bring_to_front,
5385 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_single_instance)));
5386 }
5387
config_softvol_callback(GtkWidget * button,gpointer data)5388 void config_softvol_callback(GtkWidget * button, gpointer data)
5389 {
5390 gtk_widget_set_sensitive(config_remember_softvol, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_softvol)));
5391 gtk_widget_set_sensitive(config_volume_gain, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_softvol)));
5392
5393 }
5394
config_forcecache_callback(GtkWidget * button,gpointer data)5395 void config_forcecache_callback(GtkWidget * button, gpointer data)
5396 {
5397 gtk_widget_set_sensitive(config_cachesize, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_forcecache)));
5398 }
5399
ass_toggle_callback(GtkToggleButton * source,gpointer user_data)5400 void ass_toggle_callback(GtkToggleButton * source, gpointer user_data)
5401 {
5402 gtk_widget_set_sensitive(config_subtitle_color, gtk_toggle_button_get_active(source));
5403 gtk_widget_set_sensitive(config_embeddedfonts, gtk_toggle_button_get_active(source));
5404 }
5405
embedded_fonts_toggle_callback(GtkToggleButton * source,gpointer user_data)5406 void embedded_fonts_toggle_callback(GtkToggleButton * source, gpointer user_data)
5407 {
5408 gtk_widget_set_sensitive(config_subtitle_font, !gtk_toggle_button_get_active(source));
5409 gtk_widget_set_sensitive(config_subtitle_shadow, !gtk_toggle_button_get_active(source));
5410 gtk_widget_set_sensitive(config_subtitle_outline, !gtk_toggle_button_get_active(source));
5411 }
5412
hw_audio_toggle_callback(GtkToggleButton * source,gpointer user_data)5413 void hw_audio_toggle_callback(GtkToggleButton * source, gpointer user_data)
5414 {
5415 if (gtk_toggle_button_get_active(source)) {
5416 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_meter), FALSE);
5417 gtk_widget_hide(GTK_WIDGET(menuitem_view_meter));
5418 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_softvol), FALSE);
5419 gtk_widget_set_sensitive(GTK_WIDGET(config_softvol), FALSE);
5420 } else {
5421 gtk_widget_show(GTK_WIDGET(menuitem_view_meter));
5422 gtk_widget_set_sensitive(GTK_WIDGET(config_softvol), TRUE);
5423 }
5424 }
5425
output_combobox_changed_callback(GtkComboBox * config_ao,gpointer data)5426 void output_combobox_changed_callback(GtkComboBox * config_ao, gpointer data)
5427 {
5428 GtkComboBox *config_mixer = GTK_COMBO_BOX(data);
5429 gchar *device;
5430 gint card;
5431
5432 #ifdef HAVE_ASOUNDLIB
5433 snd_mixer_t *mhandle;
5434 snd_mixer_elem_t *elem;
5435 snd_mixer_selem_id_t *sid;
5436 gint err;
5437 gchar *mix;
5438 gint i, j, master, pcm;
5439 #endif
5440
5441 if (gmtk_output_combo_box_get_active_type(GMTK_OUTPUT_COMBO_BOX(config_ao)) == OUTPUT_TYPE_ALSA) {
5442 gtk_widget_set_sensitive(GTK_WIDGET(config_mixer), TRUE);
5443 card = gmtk_output_combo_box_get_active_card(GMTK_OUTPUT_COMBO_BOX(config_ao));
5444 if (card == -1) {
5445 device = g_strdup_printf("default");
5446 } else {
5447 device = g_strdup_printf("hw:%i", card);
5448 }
5449
5450 // this might be wrong, so commenting out
5451 //softvol = FALSE;
5452 //gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_softvol), softvol);
5453
5454 gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(config_mixer)));
5455 gtk_combo_box_set_active(config_mixer, -1);
5456
5457 #ifdef HAVE_ASOUNDLIB
5458 if (config_mixer != NULL) {
5459 if ((err = snd_mixer_open(&mhandle, 0)) < 0) {
5460 gm_log(verbose, G_LOG_LEVEL_INFO, "Mixer open error %s", snd_strerror(err));
5461 }
5462
5463 if ((err = snd_mixer_attach(mhandle, device)) < 0) {
5464 gm_log(verbose, G_LOG_LEVEL_INFO, "Mixer attach error %s", snd_strerror(err));
5465 }
5466
5467 if ((err = snd_mixer_selem_register(mhandle, NULL, NULL)) < 0) {
5468 gm_log(verbose, G_LOG_LEVEL_INFO, "Mixer register error %s", snd_strerror(err));
5469 }
5470
5471 if ((err = snd_mixer_load(mhandle)) < 0) {
5472 gm_log(verbose, G_LOG_LEVEL_INFO, "Mixer load error %s", snd_strerror(err));
5473 }
5474 i = 0;
5475 j = -1;
5476 master = -1;
5477 pcm = -1;
5478 snd_mixer_selem_id_alloca(&sid);
5479 //gtk_combo_box_append_text(GTK_COMBO_BOX(config_mixer), "");
5480 for (elem = snd_mixer_first_elem(mhandle); elem; elem = snd_mixer_elem_next(elem)) {
5481 snd_mixer_selem_get_id(elem, sid);
5482 if (!snd_mixer_selem_is_active(elem))
5483 continue;
5484 if (snd_mixer_selem_has_capture_volume(elem)
5485 || snd_mixer_selem_has_capture_switch(elem))
5486 continue;
5487 if (!snd_mixer_selem_has_playback_volume(elem))
5488 continue;
5489 mix = g_strdup_printf("%s,%i", snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
5490 //mix = g_strdup_printf("%s", snd_mixer_selem_id_get_name(sid));
5491 #ifdef GTK2_24_ENABLED
5492 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_mixer), mix);
5493 #else
5494 gtk_combo_box_append_text(GTK_COMBO_BOX(config_mixer), mix);
5495 #endif
5496 if (audio_device.alsa_mixer != NULL && g_ascii_strcasecmp(mix, audio_device.alsa_mixer) == 0)
5497 j = i;
5498 if (g_ascii_strcasecmp(snd_mixer_selem_id_get_name(sid), "Master") == 0)
5499 master = i;
5500 if (g_ascii_strcasecmp(snd_mixer_selem_id_get_name(sid), "PCM") == 0)
5501 pcm = i;
5502
5503 i++;
5504 }
5505 if (j != -1)
5506 gtk_combo_box_set_active(GTK_COMBO_BOX(config_mixer), j);
5507 //if (mixer != NULL && strlen(mixer) > 0 && j == -1) {
5508 // gtk_combo_box_append_text(GTK_COMBO_BOX(config_mixer), mixer);
5509 // gtk_combo_box_set_active(GTK_COMBO_BOX(config_mixer), i);
5510 //}
5511 if (j == -1 && pcm != -1)
5512 gtk_combo_box_set_active(GTK_COMBO_BOX(config_mixer), pcm);
5513 if (j == -1 && master != -1)
5514 gtk_combo_box_set_active(GTK_COMBO_BOX(config_mixer), master);
5515
5516 snd_mixer_close(mhandle);
5517
5518 }
5519 #endif
5520 g_free(device);
5521 } else {
5522 gtk_widget_set_sensitive(GTK_WIDGET(config_mixer), FALSE);
5523 }
5524
5525 if (gmtk_output_combo_box_get_active_type(GMTK_OUTPUT_COMBO_BOX(config_ao)) == OUTPUT_TYPE_ALSA && softvol == FALSE) {
5526 gtk_label_set_text(GTK_LABEL(conf_volume_label), _("Direct ALSA Control"));
5527 } else if (gmtk_output_combo_box_get_active_type(GMTK_OUTPUT_COMBO_BOX(config_ao)) == OUTPUT_TYPE_PULSE
5528 && softvol == FALSE) {
5529 gtk_label_set_text(GTK_LABEL(conf_volume_label), _("Direct PulseAudio Control"));
5530 } else {
5531 gtk_label_set_text(GTK_LABEL(conf_volume_label), _("Software Volume Control"));
5532 }
5533
5534 }
5535
menuitem_config_callback(GtkMenuItem * menuitem,void * data)5536 void menuitem_config_callback(GtkMenuItem * menuitem, void *data)
5537 {
5538 GtkWidget *config_window;
5539 GtkWidget *conf_vbox;
5540 GtkWidget *conf_hbutton_box;
5541 GtkWidget *conf_ok;
5542 GtkWidget *conf_cancel;
5543 GtkWidget *conf_table;
5544 GtkWidget *conf_label;
5545 GtkWidget *conf_page1;
5546 GtkWidget *conf_page2;
5547 GtkWidget *conf_page3;
5548 GtkWidget *conf_page4;
5549 GtkWidget *conf_page5;
5550 GtkWidget *conf_page6;
5551 GtkWidget *conf_page7;
5552 GtkWidget *notebook;
5553 GdkColor sub_color;
5554 gint i = 0;
5555 gint j = -1;
5556 gint k = -1;
5557 GtkTreeIter ao_iter;
5558 gchar *desc;
5559 guint key;
5560 GdkModifierType modifier;
5561
5562 config_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
5563 gtk_window_set_type_hint(GTK_WINDOW(config_window), GDK_WINDOW_TYPE_HINT_UTILITY);
5564 gtk_window_set_resizable(GTK_WINDOW(config_window), FALSE);
5565 gtk_window_set_transient_for(GTK_WINDOW(config_window), GTK_WINDOW(window));
5566 gtk_window_set_position(GTK_WINDOW(config_window), GTK_WIN_POS_CENTER_ON_PARENT);
5567 gtk_window_set_icon(GTK_WINDOW(config_window), pb_icon);
5568
5569 gtk_window_set_resizable(GTK_WINDOW(config_window), FALSE);
5570 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5571 conf_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5572 gtk_box_set_homogeneous(GTK_BOX(conf_vbox), FALSE);
5573 #else
5574 conf_vbox = gtk_vbox_new(FALSE, 10);
5575 #endif
5576 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5577 conf_page1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5578 gtk_box_set_homogeneous(GTK_BOX(conf_page1), FALSE);
5579 #else
5580 conf_page1 = gtk_vbox_new(FALSE, 10);
5581 #endif
5582 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5583 conf_page2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5584 gtk_box_set_homogeneous(GTK_BOX(conf_page2), FALSE);
5585 #else
5586 conf_page2 = gtk_vbox_new(FALSE, 10);
5587 #endif
5588 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5589 conf_page3 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5590 gtk_box_set_homogeneous(GTK_BOX(conf_page3), FALSE);
5591 #else
5592 conf_page3 = gtk_vbox_new(FALSE, 10);
5593 #endif
5594 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5595 conf_page4 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5596 gtk_box_set_homogeneous(GTK_BOX(conf_page4), FALSE);
5597 #else
5598 conf_page4 = gtk_vbox_new(FALSE, 10);
5599 #endif
5600 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5601 conf_page5 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5602 gtk_box_set_homogeneous(GTK_BOX(conf_page5), FALSE);
5603 #else
5604 conf_page5 = gtk_vbox_new(FALSE, 10);
5605 #endif
5606 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5607 conf_page6 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5608 gtk_box_set_homogeneous(GTK_BOX(conf_page6), FALSE);
5609 #else
5610 conf_page6 = gtk_vbox_new(FALSE, 10);
5611 #endif
5612 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
5613 conf_page7 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
5614 gtk_box_set_homogeneous(GTK_BOX(conf_page7), FALSE);
5615 #else
5616 conf_page7 = gtk_vbox_new(FALSE, 10);
5617 #endif
5618 conf_hbutton_box = gtk_hbutton_box_new();
5619 gtk_button_box_set_layout(GTK_BUTTON_BOX(conf_hbutton_box), GTK_BUTTONBOX_END);
5620 conf_table = gtk_table_new(20, 2, FALSE);
5621
5622 notebook = gtk_notebook_new();
5623 conf_label = gtk_label_new(_("Player"));
5624 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), conf_page1, conf_label);
5625 conf_label = gtk_label_new(_("Language Settings"));
5626 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), conf_page3, conf_label);
5627 conf_label = gtk_label_new(_("Subtitles"));
5628 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), conf_page4, conf_label);
5629 conf_label = gtk_label_new(_("Interface"));
5630 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), conf_page5, conf_label);
5631 conf_label = gtk_label_new(_("Keyboard Shortcuts"));
5632 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), conf_page7, conf_label);
5633 conf_label = gtk_label_new(_("MPlayer"));
5634 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), conf_page6, conf_label);
5635 conf_label = gtk_label_new(_("Plugin"));
5636 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), conf_page2, conf_label);
5637
5638 gtk_container_add(GTK_CONTAINER(conf_vbox), notebook);
5639 gtk_container_add(GTK_CONTAINER(config_window), conf_vbox);
5640
5641 gtk_window_set_title(GTK_WINDOW(config_window), _("GNOME MPlayer Configuration"));
5642 gtk_container_set_border_width(GTK_CONTAINER(config_window), 5);
5643 gtk_window_set_default_size(GTK_WINDOW(config_window), 300, 300);
5644 conf_ok = gtk_button_new_from_stock(GTK_STOCK_OK);
5645 g_signal_connect_swapped(G_OBJECT(conf_ok), "clicked", G_CALLBACK(config_apply), config_window);
5646
5647 conf_cancel = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
5648 g_signal_connect_swapped(G_OBJECT(conf_cancel), "clicked", G_CALLBACK(config_apply), config_window);
5649
5650 #ifdef GTK2_24_ENABLED
5651 config_vo = gtk_combo_box_text_new_with_entry();
5652 #else
5653 config_vo = gtk_combo_box_entry_new_text();
5654 #endif
5655
5656 #ifdef GTK2_12_ENABLED
5657 gtk_widget_set_tooltip_text(config_vo,
5658 _
5659 ("mplayer video output device\nx11 should always work, try xv, gl or vdpau for better performance and enhanced features"));
5660
5661 #else
5662 tooltip = gtk_tooltips_new();
5663 gtk_tooltips_set_tip(tooltip, config_vo,
5664 _
5665 ("mplayer video output device\nx11 should always work, try xv, gl or vdpau for better performance and enhanced features"),
5666 NULL);
5667 #endif
5668 if (config_vo != NULL) {
5669 #ifdef GTK2_24_ENABLED
5670 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "gl");
5671 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "gl2");
5672 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "gl3");
5673 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "x11");
5674 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "xv");
5675 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "xvmc");
5676 #ifndef __OpenBSD__
5677 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "vaapi");
5678 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), "vdpau");
5679 #endif
5680 #else
5681 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "gl");
5682 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "gl2");
5683 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "gl3");
5684 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "x11");
5685 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "xv");
5686 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "xvmc");
5687 #ifndef __OpenBSD__
5688 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "vaapi");
5689 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), "vdpau");
5690 #endif
5691 #endif
5692
5693 if (vo != NULL) {
5694 if (strcmp(vo, "gl") == 0)
5695 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 0);
5696 if (strcmp(vo, "gl2") == 0)
5697 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 1);
5698 if (strcmp(vo, "gl3") == 0)
5699 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 2);
5700 if (strcmp(vo, "x11") == 0)
5701 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 3);
5702 if (strcmp(vo, "xv") == 0)
5703 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 4);
5704 if (strcmp(vo, "xvmc") == 0)
5705 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 5);
5706 if (strcmp(vo, "vaapi") == 0)
5707 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 6);
5708 if (strcmp(vo, "vdpau") == 0)
5709 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 7);
5710 if (gtk_combo_box_get_active(GTK_COMBO_BOX(config_vo))
5711 == -1) {
5712 #ifdef GTK2_24_ENABLED
5713 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_vo), vo);
5714 #else
5715 gtk_combo_box_append_text(GTK_COMBO_BOX(config_vo), vo);
5716 #endif
5717 #ifndef __OpenBSD__
5718 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 8);
5719 #else
5720 gtk_combo_box_set_active(GTK_COMBO_BOX(config_vo), 6);
5721 #endif
5722 }
5723 }
5724 }
5725
5726 config_use_hw_audio = gtk_check_button_new_with_mnemonic(_("Enable AC3/DTS pass-through to S/PDIF"));
5727 g_signal_connect(GTK_WIDGET(config_use_hw_audio), "toggled", G_CALLBACK(hw_audio_toggle_callback), NULL);
5728
5729 #ifdef GTK2_24_ENABLED
5730 config_mixer = gtk_combo_box_text_new_with_entry();
5731 #else
5732 config_mixer = gtk_combo_box_entry_new_text();
5733 #endif
5734
5735 config_softvol = gtk_check_button_new_with_label(_("Mplayer Software Volume Control Enabled"));
5736 conf_volume_label = gtk_label_new("");
5737
5738 config_ao = gmtk_output_combo_box_new();
5739 g_signal_connect(GTK_WIDGET(config_ao), "changed", G_CALLBACK(output_combobox_changed_callback), config_mixer);
5740
5741 if (gtk_tree_model_get_iter_first(gmtk_output_combo_box_get_tree_model(GMTK_OUTPUT_COMBO_BOX(config_ao)), &ao_iter)) {
5742 do {
5743 if (gtk_list_store_iter_is_valid
5744 (GTK_LIST_STORE(gmtk_output_combo_box_get_tree_model(GMTK_OUTPUT_COMBO_BOX(config_ao))), &ao_iter)) {
5745 gtk_tree_model_get(gmtk_output_combo_box_get_tree_model
5746 (GMTK_OUTPUT_COMBO_BOX(config_ao)), &ao_iter, OUTPUT_DESCRIPTION_COLUMN, &desc, -1);
5747
5748 gm_log(verbose, G_LOG_LEVEL_DEBUG, "audio_device_name = %s, desc = %s", audio_device_name, desc);
5749 if (audio_device_name != NULL && strcmp(audio_device_name, desc) == 0) {
5750 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(config_ao), &ao_iter);
5751 g_free(desc);
5752 break;
5753 }
5754
5755 if ((audio_device_name == NULL || strcmp(audio_device_name, "") == 0)
5756 && strcmp(desc, _("Default")) == 0) {
5757 gtk_combo_box_set_active_iter(GTK_COMBO_BOX(config_ao), &ao_iter);
5758 g_free(desc);
5759 break;
5760 }
5761 g_free(desc);
5762
5763 }
5764 } while (gtk_tree_model_iter_next
5765 (gmtk_output_combo_box_get_tree_model(GMTK_OUTPUT_COMBO_BOX(config_ao)), &ao_iter));
5766 }
5767 #ifdef GTK2_24_ENABLED
5768 config_alang = gtk_combo_box_text_new_with_entry();
5769 #else
5770 config_alang = gtk_combo_box_entry_new_text();
5771 #endif
5772 if (config_alang != NULL) {
5773 i = 0;
5774 j = -1;
5775 k = -1;
5776 while (langlist[i] != NULL) {
5777 if (alang != NULL && strlen(alang) > 0 && g_ascii_strncasecmp(alang, langlist[i], strlen(alang)) == 0)
5778 j = i;
5779 if (alang != NULL && strlen(alang) == 0
5780 && g_ascii_strncasecmp("English,eng,en", langlist[i], strlen("English,eng,en")) == 0)
5781 k = i;
5782 #ifdef GTK2_24_ENABLED
5783 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_alang), langlist[i++]);
5784 #else
5785 gtk_combo_box_append_text(GTK_COMBO_BOX(config_alang), langlist[i++]);
5786 #endif
5787 if (j != -1) {
5788 gtk_combo_box_set_active(GTK_COMBO_BOX(config_alang), j);
5789 }
5790 if (k != -1) {
5791 gtk_combo_box_set_active(GTK_COMBO_BOX(config_alang), k);
5792 }
5793 }
5794 if (alang != NULL && strlen(alang) > 0 && j == -1) {
5795 #ifdef GTK2_24_ENABLED
5796 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_alang), alang);
5797 #else
5798 gtk_combo_box_append_text(GTK_COMBO_BOX(config_alang), alang);
5799 #endif
5800 gtk_combo_box_set_active(GTK_COMBO_BOX(config_alang), i);
5801 }
5802 gtk_widget_set_tooltip_text(config_alang,
5803 _("Choose one of the languages or type in your own comma-separated selection"));
5804 }
5805 #ifdef GTK2_24_ENABLED
5806 config_slang = gtk_combo_box_text_new_with_entry();
5807 #else
5808 config_slang = gtk_combo_box_entry_new_text();
5809 #endif
5810 if (config_slang != NULL) {
5811 i = 0;
5812 j = -1;
5813 k = -1;
5814 while (langlist[i] != NULL) {
5815 if (slang != NULL && strlen(slang) > 0 && g_ascii_strncasecmp(slang, langlist[i], strlen(slang)) == 0)
5816 j = i;
5817 if (slang != NULL && strlen(slang) == 0
5818 && g_ascii_strncasecmp("English,eng,en", langlist[i], strlen("English,eng,en")) == 0)
5819 k = i;
5820 #ifdef GTK2_24_ENABLED
5821 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_slang), langlist[i++]);
5822 #else
5823 gtk_combo_box_append_text(GTK_COMBO_BOX(config_slang), langlist[i++]);
5824 #endif
5825 if (j != -1) {
5826 gtk_combo_box_set_active(GTK_COMBO_BOX(config_slang), j);
5827 }
5828 if (k != -1) {
5829 gtk_combo_box_set_active(GTK_COMBO_BOX(config_slang), k);
5830 }
5831 }
5832 if (slang != NULL && strlen(slang) > 0 && j == -1) {
5833 #ifdef GTK2_24_ENABLED
5834 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_slang), slang);
5835 #else
5836 gtk_combo_box_append_text(GTK_COMBO_BOX(config_slang), slang);
5837 #endif
5838 gtk_combo_box_set_active(GTK_COMBO_BOX(config_slang), i);
5839 }
5840 gtk_widget_set_tooltip_text(config_slang,
5841 _("Choose one of the languages or type in your own comma-separated selection"));
5842 }
5843 #ifdef GTK2_24_ENABLED
5844 config_metadata_codepage = gtk_combo_box_text_new_with_entry();
5845 #else
5846 config_metadata_codepage = gtk_combo_box_entry_new_text();
5847 #endif
5848 if (config_metadata_codepage != NULL) {
5849 i = 0;
5850 j = -1;
5851 while (codepagelist[i] != NULL) {
5852 if (metadata_codepage != NULL && strlen(metadata_codepage) > 1
5853 && g_ascii_strncasecmp(metadata_codepage, codepagelist[i], strlen(metadata_codepage)) == 0)
5854 j = i;
5855 #ifdef GTK2_24_ENABLED
5856 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_metadata_codepage), codepagelist[i++]);
5857 #else
5858 gtk_combo_box_append_text(GTK_COMBO_BOX(config_metadata_codepage), codepagelist[i++]);
5859 #endif
5860 if (j != -1)
5861 gtk_combo_box_set_active(GTK_COMBO_BOX(config_metadata_codepage), j);
5862 }
5863 if (metadata_codepage != NULL && j == -1) {
5864 #ifdef GTK2_24_ENABLED
5865 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_metadata_codepage), metadata_codepage);
5866 #else
5867 gtk_combo_box_append_text(GTK_COMBO_BOX(config_metadata_codepage), metadata_codepage);
5868 #endif
5869 gtk_combo_box_set_active(GTK_COMBO_BOX(config_metadata_codepage), i);
5870 }
5871 }
5872 #ifdef GTK2_24_ENABLED
5873 config_subtitle_codepage = gtk_combo_box_text_new_with_entry();
5874 #else
5875 config_subtitle_codepage = gtk_combo_box_entry_new_text();
5876 #endif
5877 if (config_subtitle_codepage != NULL) {
5878 i = 0;
5879 j = -1;
5880 while (codepagelist[i] != NULL) {
5881 if (subtitle_codepage != NULL && strlen(subtitle_codepage) > 1
5882 && g_ascii_strncasecmp(subtitle_codepage, codepagelist[i], strlen(subtitle_codepage)) == 0)
5883 j = i;
5884 #ifdef GTK2_24_ENABLED
5885 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_subtitle_codepage), codepagelist[i++]);
5886 #else
5887 gtk_combo_box_append_text(GTK_COMBO_BOX(config_subtitle_codepage), codepagelist[i++]);
5888 #endif
5889
5890 if (j != -1)
5891 gtk_combo_box_set_active(GTK_COMBO_BOX(config_subtitle_codepage), j);
5892 }
5893 if (subtitle_codepage != NULL && j == -1) {
5894 #ifdef GTK2_24_ENABLED
5895 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_subtitle_codepage), subtitle_codepage);
5896 #else
5897 gtk_combo_box_append_text(GTK_COMBO_BOX(config_subtitle_codepage), subtitle_codepage);
5898 #endif
5899 gtk_combo_box_set_active(GTK_COMBO_BOX(config_subtitle_codepage), i);
5900 }
5901 }
5902 #ifdef GTK2_24_ENABLED
5903 config_audio_channels = gtk_combo_box_text_new_with_entry();
5904 #else
5905 config_audio_channels = gtk_combo_box_entry_new_text();
5906 #endif
5907 if (config_audio_channels != NULL) {
5908 #ifdef GTK2_24_ENABLED
5909
5910 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_audio_channels), "Stereo");
5911 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_audio_channels), "Surround");
5912 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_audio_channels), "5.1 Surround");
5913 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_audio_channels), "7.1 Surround");
5914 #else
5915
5916 gtk_combo_box_append_text(GTK_COMBO_BOX(config_audio_channels), "Stereo");
5917 gtk_combo_box_append_text(GTK_COMBO_BOX(config_audio_channels), "Surround");
5918 gtk_combo_box_append_text(GTK_COMBO_BOX(config_audio_channels), "5.1 Surround");
5919 gtk_combo_box_append_text(GTK_COMBO_BOX(config_audio_channels), "7.1 Surround");
5920 #endif
5921 gtk_combo_box_set_active(GTK_COMBO_BOX(config_audio_channels), audio_channels);
5922 }
5923 #ifdef GTK2_24_ENABLED
5924 config_resume_mode = gtk_combo_box_text_new_with_entry();
5925 #else
5926 config_resume_mode = gtk_combo_box_new_text();
5927 #endif
5928 if (config_resume_mode != NULL) {
5929 #ifdef GTK2_24_ENABLED
5930
5931 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_resume_mode), _("Always ask"));
5932 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_resume_mode), _("Always resume without asking"));
5933 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_resume_mode), _("Never resume"));
5934 #else
5935
5936 gtk_combo_box_append_text(GTK_COMBO_BOX(config_resume_mode), _("Always ask"));
5937 gtk_combo_box_append_text(GTK_COMBO_BOX(config_resume_mode), _("Always resume without asking"));
5938 gtk_combo_box_append_text(GTK_COMBO_BOX(config_resume_mode), _("Never resume"));
5939 #endif
5940 gtk_combo_box_set_active(GTK_COMBO_BOX(config_resume_mode), resume_mode);
5941 }
5942
5943 i = 0;
5944 j = -1;
5945
5946 #ifdef GTK2_24_ENABLED
5947 config_mplayer_dvd_device = gtk_combo_box_text_new_with_entry();
5948 #else
5949 config_mplayer_dvd_device = gtk_combo_box_entry_new_text();
5950 #endif
5951
5952 #ifdef __OpenBSD__
5953 #ifdef GTK2_24_ENABLED
5954 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_mplayer_dvd_device), "/dev/rcd0c");
5955 #else
5956 gtk_combo_box_append_text(GTK_COMBO_BOX(config_mplayer_dvd_device), "/dev/rcd0c");
5957 #endif
5958
5959 if (mplayer_dvd_device == NULL || g_ascii_strcasecmp("/dev/rcd0c", mplayer_dvd_device) == 0) {
5960 j = i;
5961 }
5962 #else
5963 #ifdef GTK2_24_ENABLED
5964 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_mplayer_dvd_device), "/dev/dvd");
5965 #else
5966 gtk_combo_box_append_text(GTK_COMBO_BOX(config_mplayer_dvd_device), "/dev/dvd");
5967 #endif
5968 if (mplayer_dvd_device == NULL || g_ascii_strcasecmp("/dev/dvd", mplayer_dvd_device) == 0) {
5969 j = i;
5970 }
5971 #endif
5972 i++;
5973
5974 #ifdef GIO_ENABLED
5975 GVolumeMonitor *volumemonitor;
5976 GList *d, *drives;
5977 GDrive *drive;
5978 gchar *unix_device;
5979
5980
5981 volumemonitor = g_volume_monitor_get();
5982 if (volumemonitor != NULL) {
5983 drives = g_volume_monitor_get_connected_drives(volumemonitor);
5984
5985 for (d = drives; d != NULL; d = d->next) {
5986 drive = G_DRIVE(d->data);
5987 if (g_drive_can_poll_for_media(drive)) {
5988 unix_device = g_drive_get_identifier(drive, "unix-device");
5989 if (unix_device != NULL) {
5990 #ifdef GTK2_24_ENABLED
5991 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_mplayer_dvd_device), unix_device);
5992 #else
5993 gtk_combo_box_append_text(GTK_COMBO_BOX(config_mplayer_dvd_device), unix_device);
5994 #endif
5995
5996 if (mplayer_dvd_device != NULL && g_ascii_strcasecmp(unix_device, mplayer_dvd_device) == 0) {
5997 j = i;
5998 }
5999 g_free(unix_device);
6000 i++;
6001 }
6002 }
6003 }
6004
6005 }
6006 #endif
6007 if (j != -1) {
6008 gtk_combo_box_set_active(GTK_COMBO_BOX(config_mplayer_dvd_device), j);
6009 } else {
6010 #ifdef GTK2_24_ENABLED
6011 gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(config_mplayer_dvd_device), mplayer_dvd_device);
6012 #else
6013 gtk_combo_box_append_text(GTK_COMBO_BOX(config_mplayer_dvd_device), mplayer_dvd_device);
6014 #endif
6015 gtk_combo_box_set_active(GTK_COMBO_BOX(config_mplayer_dvd_device), i);
6016 }
6017
6018
6019 conf_label = gtk_label_new(_("<span weight=\"bold\">Adjust Output Settings</span>"));
6020 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6021 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6022 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6023 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6024 i++;
6025
6026 conf_label = gtk_label_new(_("Video Output:"));
6027 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6028 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6029 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6030 gtk_widget_show(conf_label);
6031 gtk_widget_set_size_request(GTK_WIDGET(config_vo), 200, -1);
6032 gtk_table_attach(GTK_TABLE(conf_table), config_vo, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6033 i++;
6034
6035 config_hardware_codecs = gtk_check_button_new_with_label(_("Enable Video Hardware Support"));
6036 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_hardware_codecs), use_hardware_codecs);
6037 #ifdef GTK2_12_ENABLED
6038 gtk_widget_set_tooltip_text(config_hardware_codecs,
6039 _
6040 ("When this option is enabled, codecs or options will be enabled to accelerate video processing. These options may cause playback to fail in some cases."));
6041 #else
6042 tooltip = gtk_tooltips_new();
6043 gtk_tooltips_set_tip(tooltip, config_hardware_codecs,
6044 _
6045 ("When this option is enabled, codecs or options will be enabled to accelerate video processing. These options may cause playback to fail in some cases."),
6046 NULL);
6047 #endif
6048 gtk_widget_set_size_request(GTK_WIDGET(config_hardware_codecs), 200, -1);
6049 gtk_table_attach(GTK_TABLE(conf_table), config_hardware_codecs, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK,
6050 0, 0);
6051 i++;
6052
6053 config_crystalhd_codecs = gtk_check_button_new_with_label(_("Enable CrystalHD Hardware Support"));
6054 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_crystalhd_codecs), use_crystalhd_codecs);
6055 gtk_widget_set_size_request(GTK_WIDGET(config_crystalhd_codecs), 200, -1);
6056 gtk_table_attach(GTK_TABLE(conf_table), config_crystalhd_codecs, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK,
6057 0, 0);
6058 i++;
6059
6060 conf_label = gtk_label_new(_("Audio Output:"));
6061 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6062 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6063 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6064 gtk_widget_show(conf_label);
6065 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6066 gtk_widget_set_size_request(GTK_WIDGET(config_ao), 200, -1);
6067 gtk_table_attach(GTK_TABLE(conf_table), config_ao, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6068 i++;
6069
6070 conf_label = gtk_label_new(_("Audio Volume Type:"));
6071 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6072 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6073 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6074 gtk_widget_show(conf_label);
6075 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6076 gtk_misc_set_padding(GTK_MISC(conf_volume_label), 6, 6);
6077 gtk_misc_set_alignment(GTK_MISC(conf_volume_label), 0.0, 0.5);
6078 gtk_table_attach(GTK_TABLE(conf_table), conf_volume_label, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6079 i++;
6080
6081 #ifdef HAVE_ASOUNDLIB
6082 conf_label = gtk_label_new(_("Default Mixer:"));
6083 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6084 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6085 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6086 gtk_widget_show(conf_label);
6087 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6088 gtk_widget_set_size_request(GTK_WIDGET(config_mixer), 200, -1);
6089 gtk_table_attach(GTK_TABLE(conf_table), config_mixer, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6090 i++;
6091 #endif
6092 conf_label = gtk_label_new(_("Audio Channels to Output:"));
6093 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6094 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6095 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6096 gtk_widget_show(conf_label);
6097 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6098 gtk_widget_set_size_request(GTK_WIDGET(config_audio_channels), 200, -1);
6099 gtk_table_attach(GTK_TABLE(conf_table), config_audio_channels, 1, 2, i, i + 1,
6100 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6101 i++;
6102
6103 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_use_hw_audio), use_hw_audio);
6104 gtk_table_attach(GTK_TABLE(conf_table), config_use_hw_audio, 1, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6105 gtk_widget_show(config_use_hw_audio);
6106 i++;
6107
6108 conf_label = gtk_label_new("");
6109 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6110 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6111 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_EXPAND, GTK_SHRINK, 0, 0);
6112 gtk_widget_show(conf_label);
6113 i++;
6114
6115 gtk_container_add(GTK_CONTAINER(conf_page1), conf_table);
6116
6117 //conf_table = gtk_table_new(20, 2, FALSE);
6118 //gtk_container_add(GTK_CONTAINER(conf_page1), conf_table);
6119 //i = 0;
6120 conf_label = gtk_label_new(_("<span weight=\"bold\">Adjust Configuration Settings</span>"));
6121 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6122 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6123 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6124 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6125 i++;
6126
6127 #ifndef HAVE_ASOUNDLIB
6128 conf_label = gtk_label_new(_("Default Volume Level:"));
6129 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6130 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6131 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6132 gtk_widget_show(conf_label);
6133 config_volume = gtk_spin_button_new_with_range(0, 100, 1);
6134 #ifdef GTK2_12_ENABLED
6135 gtk_widget_set_tooltip_text(config_volume, _("Default volume for playback"));
6136 #else
6137 tooltip = gtk_tooltips_new();
6138 gtk_tooltips_set_tip(tooltip, config_volume, _("Default volume for playback"), NULL);
6139 #endif
6140 gtk_widget_set_size_request(config_volume, 100, -1);
6141 gtk_table_attach(GTK_TABLE(conf_table), config_volume, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6142 gm_store = gm_pref_store_new("gnome-mplayer");
6143 gtk_spin_button_set_value(GTK_SPIN_BUTTON(config_volume), gm_pref_store_get_int(gm_store, VOLUME));
6144 gm_pref_store_free(gm_store);
6145 gtk_entry_set_width_chars(GTK_ENTRY(config_volume), 6);
6146 gtk_editable_set_editable(GTK_EDITABLE(config_volume), TRUE);
6147 gtk_entry_set_alignment(GTK_ENTRY(config_volume), 1);
6148 gtk_widget_show(config_volume);
6149 i++;
6150 #endif
6151
6152 conf_label = gtk_label_new(_("On Screen Display Level:"));
6153 config_osdlevel = gtk_hscale_new_with_range(0.0, 3.0, 1.0);
6154 gtk_range_set_value(GTK_RANGE(config_osdlevel), osdlevel);
6155 g_signal_connect(G_OBJECT(config_osdlevel), "format-value", G_CALLBACK(osdlevel_format_callback), NULL);
6156 g_signal_connect(G_OBJECT(config_osdlevel), "value-changed", G_CALLBACK(osdlevel_change_callback), NULL);
6157 gtk_widget_set_size_request(config_osdlevel, 150, -1);
6158 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 1.0);
6159 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6160 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6161 gtk_table_attach(GTK_TABLE(conf_table), config_osdlevel, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6162 i++;
6163
6164 conf_label = gtk_label_new(_("Post-processing level:"));
6165 config_pplevel = gtk_hscale_new_with_range(0.0, 6.0, 1.0);
6166 g_signal_connect(G_OBJECT(config_pplevel), "format-value", G_CALLBACK(pplevel_format_callback), NULL);
6167 gtk_widget_set_size_request(config_pplevel, 150, -1);
6168 gtk_range_set_value(GTK_RANGE(config_pplevel), pplevel);
6169 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 1.0);
6170 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6171 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6172 gtk_table_attach(GTK_TABLE(conf_table), config_pplevel, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6173 i++;
6174
6175 conf_table = gtk_table_new(20, 2, FALSE);
6176 gtk_container_add(GTK_CONTAINER(conf_page2), conf_table);
6177 i = 0;
6178 conf_label = gtk_label_new(_("<span weight=\"bold\">Adjust Plugin Emulation Settings</span>\n\n"
6179 "These options affect the gecko-mediaplayer plugin when it is installed.\n"
6180 "Gecko-mediaplayer is a Firefox plugin that will emulate various\n"
6181 "media players and allow playback of various web content within\n"
6182 "NPRuntime compatible browsers (Firefox, Konqueror, etc)."));
6183 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6184 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6185 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6186 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6187 i++;
6188
6189 config_qt = gtk_check_button_new_with_label(_("QuickTime Emulation"));
6190 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_qt), !qt_disabled);
6191 gtk_table_attach(GTK_TABLE(conf_table), config_qt, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6192 i++;
6193
6194 config_real = gtk_check_button_new_with_label(_("RealPlayer Emulation"));
6195 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_real), !real_disabled);
6196 gtk_table_attach(GTK_TABLE(conf_table), config_real, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6197 i++;
6198
6199 config_wmp = gtk_check_button_new_with_label(_("Windows Media Player Emulation"));
6200 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_wmp), !wmp_disabled);
6201 gtk_table_attach(GTK_TABLE(conf_table), config_wmp, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6202 i++;
6203
6204 config_dvx = gtk_check_button_new_with_label(_("DiVX Player Emulation"));
6205 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_dvx), !dvx_disabled);
6206 gtk_table_attach(GTK_TABLE(conf_table), config_dvx, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6207 i++;
6208
6209 config_midi = gtk_check_button_new_with_label(_("MIDI Support (requires MPlayer support)"));
6210 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_midi), !midi_disabled);
6211 gtk_table_attach(GTK_TABLE(conf_table), config_midi, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6212 i++;
6213
6214 config_noembed = gtk_check_button_new_with_label(_("Disable Player Embedding"));
6215 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_noembed), embedding_disabled);
6216 gtk_table_attach(GTK_TABLE(conf_table), config_noembed, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6217 i++;
6218
6219 config_noscaling = gtk_check_button_new_with_label(_("Disable Embedded Player Scaling"));
6220 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_noscaling), disable_embedded_scaling);
6221 gtk_table_attach(GTK_TABLE(conf_table), config_noscaling, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6222 i++;
6223
6224 conf_label = gtk_label_new(_("Audio Cache Size (KB):"));
6225 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6226 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6227 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6228 gtk_widget_show(conf_label);
6229 config_plugin_audio_cache_size = gtk_spin_button_new_with_range(64, 256 * 1024, 64);
6230 config_plugin_video_cache_size = gtk_spin_button_new_with_range(256, 256 * 1024, 256);
6231 #ifdef GTK2_12_ENABLED
6232 gtk_widget_set_tooltip_text(config_plugin_audio_cache_size,
6233 _
6234 ("Amount of data to cache when playing media from network, use higher values for slow networks."));
6235 gtk_widget_set_tooltip_text(config_plugin_video_cache_size,
6236 _
6237 ("Amount of data to cache when playing media from network, use higher values for slow networks."));
6238
6239 #else
6240 tooltip = gtk_tooltips_new();
6241 gtk_tooltips_set_tip(tooltip, config_plugin_audio_cache_size,
6242 _
6243 ("Amount of data to cache when playing media from network, use higher values for slow networks."),
6244 NULL);
6245 tooltip = gtk_tooltips_new();
6246 gtk_tooltips_set_tip(tooltip, config_plugin_video_cache_size,
6247 _
6248 ("Amount of data to cache when playing media from network, use higher values for slow networks."),
6249 NULL);
6250 #endif
6251 //gtk_widget_set_size_request(config_plugin_cache_size, 200, -1);
6252 gtk_table_attach(GTK_TABLE(conf_table), config_plugin_audio_cache_size, 1, 2, i, i + 1,
6253 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6254 //gtk_range_set_value(GTK_RANGE(config_cachesize), cache_size);
6255 gtk_spin_button_set_value(GTK_SPIN_BUTTON(config_plugin_audio_cache_size), plugin_audio_cache_size);
6256 gtk_entry_set_width_chars(GTK_ENTRY(config_plugin_audio_cache_size), 6);
6257 #ifndef GTK2_24_ENABLED
6258 gtk_entry_set_editable(GTK_ENTRY(config_plugin_audio_cache_size), FALSE);
6259 #endif
6260 gtk_entry_set_alignment(GTK_ENTRY(config_plugin_audio_cache_size), 1);
6261 gtk_widget_show(config_plugin_audio_cache_size);
6262 i++;
6263
6264 conf_label = gtk_label_new(_("Video Cache Size (KB):"));
6265 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6266 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6267 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6268 gtk_widget_show(conf_label);
6269
6270 gtk_table_attach(GTK_TABLE(conf_table), config_plugin_video_cache_size, 1, 2, i, i + 1,
6271 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6272 gtk_spin_button_set_value(GTK_SPIN_BUTTON(config_plugin_video_cache_size), plugin_video_cache_size);
6273 gtk_entry_set_width_chars(GTK_ENTRY(config_plugin_video_cache_size), 6);
6274 #ifndef GTK2_24_ENABLED
6275 gtk_entry_set_editable(GTK_ENTRY(config_plugin_video_cache_size), FALSE);
6276 #endif
6277 gtk_entry_set_alignment(GTK_ENTRY(config_plugin_video_cache_size), 1);
6278 gtk_widget_show(config_plugin_video_cache_size);
6279 i++;
6280
6281
6282 // Language
6283 conf_table = gtk_table_new(20, 2, FALSE);
6284 gtk_container_add(GTK_CONTAINER(conf_page3), conf_table);
6285 i = 0;
6286 conf_label = gtk_label_new(_("<span weight=\"bold\">Adjust Language Settings</span>"));
6287 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6288 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6289 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6290 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6291 i++;
6292
6293 conf_label = gtk_label_new(_("Default Audio Language"));
6294 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6295 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6296 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6297 gtk_widget_show(conf_label);
6298 gtk_widget_set_size_request(GTK_WIDGET(config_alang), 200, -1);
6299 gtk_table_attach(GTK_TABLE(conf_table), config_alang, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6300 gtk_widget_set_tooltip_text(conf_label,
6301 _("Choose one of the languages or type in your own comma-separated selection"));
6302 i++;
6303
6304 conf_label = gtk_label_new(_("Default Subtitle Language:"));
6305 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6306 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6307 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);;
6308 gtk_widget_show(conf_label);
6309 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6310 gtk_widget_set_size_request(GTK_WIDGET(config_slang), 200, -1);
6311 gtk_table_attach(GTK_TABLE(conf_table), config_slang, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6312 gtk_widget_set_tooltip_text(conf_label,
6313 _("Choose one of the languages or type in your own comma-separated selection"));
6314 i++;
6315
6316 conf_label = gtk_label_new(_("File Metadata Encoding:"));
6317 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6318 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6319 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6320 gtk_widget_show(conf_label);
6321 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6322 gtk_widget_set_size_request(GTK_WIDGET(config_metadata_codepage), 200, -1);
6323
6324 gtk_table_attach(GTK_TABLE(conf_table), config_metadata_codepage, 1, 2, i, i + 1,
6325 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6326 i++;
6327
6328 // Page 4
6329 conf_table = gtk_table_new(20, 2, FALSE);
6330 gtk_container_add(GTK_CONTAINER(conf_page4), conf_table);
6331 i = 0;
6332 conf_label = gtk_label_new(_("<span weight=\"bold\">Subtitle Settings</span>"));
6333 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6334 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6335 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6336 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6337 i++;
6338
6339 config_ass = gtk_check_button_new_with_mnemonic(_("Enable _Advanced Substation Alpha (ASS) Subtitle Support"));
6340 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_ass), !disable_ass);
6341 g_signal_connect(G_OBJECT(config_ass), "toggled", G_CALLBACK(ass_toggle_callback), NULL);
6342 gtk_table_attach(GTK_TABLE(conf_table), config_ass, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6343 gtk_widget_show(config_ass);
6344 i++;
6345
6346 config_embeddedfonts = gtk_check_button_new_with_mnemonic(_("Use _Embedded Fonts (MKV only)"));
6347 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_embeddedfonts), !disable_embeddedfonts);
6348 gtk_widget_set_sensitive(config_embeddedfonts, !disable_ass);
6349 // g_signal_connect(G_OBJECT(config_embeddedfonts), "toggled",
6350 // G_CALLBACK(embedded_fonts_toggle_callback), NULL);
6351 gtk_table_attach(GTK_TABLE(conf_table), config_embeddedfonts, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6352 gtk_widget_show(config_embeddedfonts);
6353 i++;
6354
6355 conf_label = gtk_label_new(_("Subtitle Font:"));
6356 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6357 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6358 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6359 gtk_widget_show(conf_label);
6360 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6361
6362 config_subtitle_font = gtk_font_button_new();
6363 if (subtitlefont != NULL) {
6364 gtk_font_button_set_font_name(GTK_FONT_BUTTON(config_subtitle_font), subtitlefont);
6365 }
6366 // gtk_widget_set_sensitive(config_subtitle_font, disable_embeddedfonts);
6367 gtk_font_button_set_show_size(GTK_FONT_BUTTON(config_subtitle_font), TRUE);
6368 gtk_font_button_set_show_style(GTK_FONT_BUTTON(config_subtitle_font), TRUE);
6369
6370 gtk_font_button_set_use_size(GTK_FONT_BUTTON(config_subtitle_font), FALSE);
6371 gtk_font_button_set_use_font(GTK_FONT_BUTTON(config_subtitle_font), TRUE);
6372
6373 gtk_font_button_set_title(GTK_FONT_BUTTON(config_subtitle_font), _("Subtitle Font Selection"));
6374 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_font, 1, 2, i, i + 1,
6375 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6376 i++;
6377
6378 conf_label = gtk_label_new(_("Subtitle Color:"));
6379 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6380 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6381 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6382 gtk_widget_show(conf_label);
6383 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6384 config_subtitle_color = gtk_color_button_new();
6385 if (subtitle_color != NULL && strlen(subtitle_color) > 5) {
6386 sub_color.red = g_ascii_xdigit_value(subtitle_color[0]) << 4;
6387 sub_color.red += g_ascii_xdigit_value(subtitle_color[1]);
6388 sub_color.red = sub_color.red << 8;
6389 sub_color.green = g_ascii_xdigit_value(subtitle_color[2]) << 4;
6390 sub_color.green += g_ascii_xdigit_value(subtitle_color[3]);
6391 sub_color.green = sub_color.green << 8;
6392 sub_color.blue = g_ascii_xdigit_value(subtitle_color[4]) << 4;
6393 sub_color.blue += g_ascii_xdigit_value(subtitle_color[5]);
6394 sub_color.blue = sub_color.blue << 8;
6395 gtk_color_button_set_color(GTK_COLOR_BUTTON(config_subtitle_color), &sub_color);
6396 } else {
6397 sub_color.red = 0xFF << 8;
6398 sub_color.green = 0xFF << 8;
6399 sub_color.blue = 0xFF << 8;
6400 gtk_color_button_set_color(GTK_COLOR_BUTTON(config_subtitle_color), &sub_color);
6401 }
6402 gtk_color_button_set_title(GTK_COLOR_BUTTON(config_subtitle_color), _("Subtitle Color Selection"));
6403 gtk_widget_set_sensitive(config_subtitle_color, !disable_ass);
6404 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_color, 1, 2, i, i + 1,
6405 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6406 i++;
6407
6408 config_subtitle_outline = gtk_check_button_new_with_label(_("Outline Subtitle Font"));
6409 // gtk_widget_set_sensitive(config_subtitle_outline, disable_embeddedfonts);
6410 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_subtitle_outline), subtitle_outline);
6411 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_outline, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6412 i++;
6413
6414 config_subtitle_shadow = gtk_check_button_new_with_label(_("Shadow Subtitle Font"));
6415 // gtk_widget_set_sensitive(config_subtitle_shadow, disable_embeddedfonts);
6416 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_subtitle_shadow), subtitle_shadow);
6417 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_shadow, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6418 i++;
6419
6420 conf_label = gtk_label_new(_("Subtitle Font Scaling:"));
6421 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6422 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6423 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6424 gtk_widget_show(conf_label);
6425 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6426 config_subtitle_scale = gtk_spin_button_new_with_range(0.25, 10, 0.05);
6427 gtk_widget_set_size_request(config_subtitle_scale, -1, -1);
6428 gtk_spin_button_set_value(GTK_SPIN_BUTTON(config_subtitle_scale), subtitle_scale);
6429 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_scale, 1, 2, i, i + 1,
6430 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6431 i++;
6432
6433 conf_label = gtk_label_new(_("Subtitle File Encoding:"));
6434 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6435 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6436 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6437 gtk_widget_show(conf_label);
6438 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6439 gtk_widget_set_size_request(GTK_WIDGET(config_subtitle_codepage), 200, -1);
6440
6441 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_codepage, 1, 2, i, i + 1,
6442 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6443 i++;
6444
6445 conf_label = gtk_label_new(_("Subtitle Lower Margin (X11/XV Only):"));
6446 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6447 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6448 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6449 gtk_widget_show(conf_label);
6450 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6451 config_subtitle_margin = gtk_spin_button_new_with_range(0, 200, 1);
6452 gtk_widget_set_size_request(config_subtitle_scale, -1, -1);
6453 gtk_spin_button_set_value(GTK_SPIN_BUTTON(config_subtitle_margin), subtitle_margin);
6454 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_margin, 1, 2, i, i + 1,
6455 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6456 i++;
6457
6458 config_show_subtitles = gtk_check_button_new_with_label(_("Show Subtitles by Default"));
6459 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_show_subtitles), showsubtitles);
6460 gtk_table_attach(GTK_TABLE(conf_table), config_show_subtitles, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6461 i++;
6462
6463 conf_label = gtk_label_new(_("Subtitle Load Fuzziness:"));
6464 config_subtitle_fuzziness = gtk_hscale_new_with_range(0.0, 2.0, 1.0);
6465 g_signal_connect(G_OBJECT(config_subtitle_fuzziness), "format-value",
6466 G_CALLBACK(subtitle_fuzziness_format_callback), NULL);
6467 gtk_widget_set_size_request(config_subtitle_fuzziness, 150, -1);
6468 gtk_range_set_value(GTK_RANGE(config_subtitle_fuzziness), subtitle_fuzziness);
6469 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 1.0);
6470 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6471 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6472 gtk_table_attach(GTK_TABLE(conf_table), config_subtitle_fuzziness, 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND,
6473 GTK_SHRINK, 0, 0);
6474 i++;
6475
6476
6477 // Page 5
6478 conf_table = gtk_table_new(20, 2, FALSE);
6479 gtk_container_add(GTK_CONTAINER(conf_page5), conf_table);
6480 i = 0;
6481 conf_label = gtk_label_new(_("<span weight=\"bold\">Application Preferences</span>"));
6482 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6483 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6484 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6485 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6486 i++;
6487
6488 conf_label = gtk_label_new(_("Media Resume:"));
6489 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6490 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6491 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6492 gtk_widget_show(conf_label);
6493 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6494 gtk_widget_set_size_request(GTK_WIDGET(config_resume_mode), 200, -1);
6495 gtk_table_attach(GTK_TABLE(conf_table), config_resume_mode, 1, 2, i, i + 1,
6496 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6497 i++;
6498
6499 config_playlist_visible = gtk_check_button_new_with_label(_("Start with playlist visible"));
6500 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_playlist_visible), playlist_visible);
6501 gtk_table_attach(GTK_TABLE(conf_table), config_playlist_visible, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6502 i++;
6503
6504 config_details_visible = gtk_check_button_new_with_label(_("Start with details visible"));
6505 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_details_visible), details_visible);
6506 gtk_table_attach(GTK_TABLE(conf_table), config_details_visible, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6507 i++;
6508
6509 config_use_mediakeys = gtk_check_button_new_with_label(_("Respond to Keyboard Media Keys"));
6510 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_use_mediakeys), use_mediakeys);
6511 gtk_table_attach(GTK_TABLE(conf_table), config_use_mediakeys, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6512 i++;
6513
6514 config_use_defaultpl = gtk_check_button_new_with_label(_("Use default playlist"));
6515 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_use_defaultpl), use_defaultpl);
6516 gtk_table_attach(GTK_TABLE(conf_table), config_use_defaultpl, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6517 i++;
6518
6519 #ifdef NOTIFY_ENABLED
6520 config_show_notification = gtk_check_button_new_with_label(_("Show notification popup"));
6521 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_show_notification), show_notification);
6522 gtk_table_attach(GTK_TABLE(conf_table), config_show_notification, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6523 i++;
6524 #endif
6525
6526 #ifdef GTK2_12_ENABLED
6527 config_show_status_icon = gtk_check_button_new_with_label(_("Show status icon"));
6528 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_show_status_icon), show_status_icon);
6529 gtk_table_attach(GTK_TABLE(conf_table), config_show_status_icon, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6530 i++;
6531 #endif
6532
6533 config_vertical_layout =
6534 gtk_check_button_new_with_label(_("Place playlist below media (requires application restart)"));
6535 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_vertical_layout), vertical_layout);
6536 gtk_table_attach(GTK_TABLE(conf_table), config_vertical_layout, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6537 i++;
6538
6539 config_single_instance = gtk_check_button_new_with_label(_("Only allow one instance of Gnome MPlayer"));
6540 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_single_instance), single_instance);
6541 gtk_table_attach(GTK_TABLE(conf_table), config_single_instance, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6542 g_signal_connect(G_OBJECT(config_single_instance), "toggled", G_CALLBACK(config_single_instance_callback), NULL);
6543 i++;
6544
6545 conf_label = gtk_label_new("");
6546 gtk_label_set_width_chars(GTK_LABEL(conf_label), 3);
6547 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
6548 config_replace_and_play =
6549 gtk_check_button_new_with_label(_("When opening in single instance mode, replace existing file"));
6550 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_replace_and_play), replace_and_play);
6551 gtk_table_attach(GTK_TABLE(conf_table), config_replace_and_play, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6552 gtk_widget_set_sensitive(config_replace_and_play,
6553 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_single_instance)));
6554 i++;
6555 conf_label = gtk_label_new("");
6556 gtk_label_set_width_chars(GTK_LABEL(conf_label), 3);
6557 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
6558 config_bring_to_front = gtk_check_button_new_with_label(_("When opening file, bring main window to front"));
6559 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_bring_to_front), bring_to_front);
6560 gtk_table_attach(GTK_TABLE(conf_table), config_bring_to_front, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6561 gtk_widget_set_sensitive(config_bring_to_front,
6562 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_single_instance)));
6563
6564 i++;
6565 config_remember_loc = gtk_check_button_new_with_label(_("Remember Window Location and Size"));
6566 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_remember_loc), remember_loc);
6567 gtk_table_attach(GTK_TABLE(conf_table), config_remember_loc, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6568 i++;
6569
6570 config_resize_on_new_media = gtk_check_button_new_with_label(_("Resize window when new video is loaded"));
6571 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_resize_on_new_media), resize_on_new_media);
6572 gtk_table_attach(GTK_TABLE(conf_table), config_resize_on_new_media, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6573 i++;
6574
6575 config_keep_on_top = gtk_check_button_new_with_label(_("Keep window above other windows"));
6576 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_keep_on_top), keep_on_top);
6577 gtk_table_attach(GTK_TABLE(conf_table), config_keep_on_top, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6578 i++;
6579
6580 config_pause_on_click = gtk_check_button_new_with_label(_("Pause playback on mouse click"));
6581 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_pause_on_click), !disable_pause_on_click);
6582 gtk_table_attach(GTK_TABLE(conf_table), config_pause_on_click, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6583 i++;
6584
6585 config_disable_animation = gtk_check_button_new_with_label(_("Disable Fullscreen Control Bar Animation"));
6586 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_disable_animation), disable_animation);
6587 gtk_table_attach(GTK_TABLE(conf_table), config_disable_animation, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6588 i++;
6589
6590 config_disable_cover_art_fetch = gtk_check_button_new_with_label(_("Disable Cover Art Fetch"));
6591 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_disable_cover_art_fetch), disable_cover_art_fetch);
6592 gtk_table_attach(GTK_TABLE(conf_table), config_disable_cover_art_fetch, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6593 i++;
6594
6595 config_mouse_wheel = gtk_check_button_new_with_label(_("Use Mouse Wheel to change volume, instead of seeking"));
6596 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_mouse_wheel), mouse_wheel_changes_volume);
6597 gtk_table_attach(GTK_TABLE(conf_table), config_mouse_wheel, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6598 i++;
6599
6600 config_enable_nautilus_plugin = gtk_check_button_new_with_label(_("Enable Nautilus Plugin"));
6601 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_enable_nautilus_plugin), enable_nautilus_plugin);
6602 gtk_table_attach(GTK_TABLE(conf_table), config_enable_nautilus_plugin, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6603 i++;
6604
6605 config_verbose = gtk_check_button_new_with_label(_("Verbose Debug Enabled"));
6606 #ifdef GTK2_12_ENABLED
6607 gtk_widget_set_tooltip_text(config_verbose,
6608 _
6609 ("When this option is set, extra debug information is sent to the terminal or into ~/.xsession-errors"));
6610 #else
6611 tooltip = gtk_tooltips_new();
6612 gtk_tooltips_set_tip(tooltip, config_verbose,
6613 _
6614 ("When this option is set, extra debug information is sent to the terminal or into ~/.xsession-errors"),
6615 NULL);
6616 #endif
6617 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_verbose), verbose);
6618 gtk_table_attach(GTK_TABLE(conf_table), config_verbose, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6619 i++;
6620
6621 // Page 6
6622 conf_table = gtk_table_new(20, 3, FALSE);
6623 gtk_container_add(GTK_CONTAINER(conf_page6), conf_table);
6624 i = 0;
6625 conf_label = gtk_label_new(_("<span weight=\"bold\">Advanced Settings for MPlayer</span>"));
6626 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6627 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6628 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6629 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 3, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6630 i++;
6631
6632 #ifdef GTK2_12_ENABLED
6633 gtk_widget_set_tooltip_text(config_softvol,
6634 _("Set this option if changing the volume in Gnome MPlayer changes the master volume"));
6635 #else
6636 tooltip = gtk_tooltips_new();
6637 gtk_tooltips_set_tip(tooltip, config_softvol,
6638 _("Set this option if changing the volume in Gnome MPlayer changes the master volume"), NULL);
6639 #endif
6640 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_softvol), softvol);
6641 gtk_table_attach(GTK_TABLE(conf_table), config_softvol, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6642 g_signal_connect(G_OBJECT(config_softvol), "toggled", G_CALLBACK(config_softvol_callback), NULL);
6643 i++;
6644
6645 conf_label = gtk_label_new("");
6646 gtk_label_set_width_chars(GTK_LABEL(conf_label), 3);
6647 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 1, 2, i, i + 1, GTK_SHRINK, GTK_SHRINK, 0, 0);
6648 config_remember_softvol = gtk_check_button_new_with_label(_("Remember last software volume level"));
6649 #ifdef GTK2_12_ENABLED
6650 gtk_widget_set_tooltip_text(config_remember_softvol,
6651 _("Set this option if you want the software volume level to be remembered"));
6652 #else
6653 tooltip = gtk_tooltips_new();
6654 gtk_tooltips_set_tip(tooltip, config_remember_softvol,
6655 _("Set this option if you want the software volume level to be remembered"), NULL);
6656 #endif
6657 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_remember_softvol), remember_softvol);
6658 gtk_table_attach(GTK_TABLE(conf_table), config_remember_softvol, 1, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6659 gtk_widget_set_sensitive(config_remember_softvol, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_softvol)));
6660 i++;
6661
6662 conf_label = gtk_label_new(_("Volume Gain (-200dB to +60dB)"));
6663 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6664 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 1, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6665 gtk_widget_show(conf_label);
6666 config_volume_gain = gtk_spin_button_new_with_range(-200, 60, 1);
6667 gtk_widget_set_size_request(config_volume_gain, -1, -1);
6668 gtk_spin_button_set_value(GTK_SPIN_BUTTON(config_volume_gain), volume_gain);
6669 gtk_table_attach(GTK_TABLE(conf_table), config_volume_gain, 2, 3, i, i + 1,
6670 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6671 gtk_widget_set_sensitive(config_volume_gain, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_softvol)));
6672 i++;
6673
6674 config_deinterlace = gtk_check_button_new_with_mnemonic(_("De_interlace Video"));
6675 #ifdef GTK2_12_ENABLED
6676 gtk_widget_set_tooltip_text(config_deinterlace, _("Set this option if video looks striped"));
6677 #else
6678 tooltip = gtk_tooltips_new();
6679 gtk_tooltips_set_tip(tooltip, config_deinterlace, _("Set this option if video looks striped"), NULL);
6680 #endif
6681 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_deinterlace), !disable_deinterlace);
6682 gtk_table_attach(GTK_TABLE(conf_table), config_deinterlace, 0, 3, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6683 i++;
6684
6685 config_framedrop = gtk_check_button_new_with_mnemonic(_("_Drop frames"));
6686 #ifdef GTK2_12_ENABLED
6687 gtk_widget_set_tooltip_text(config_framedrop, _("Set this option if video is well behind the audio"));
6688 #else
6689 tooltip = gtk_tooltips_new();
6690 gtk_tooltips_set_tip(tooltip, config_framedrop, _("Set this option if video is well behind the audio"), NULL);
6691 #endif
6692 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_framedrop), !disable_framedrop);
6693 gtk_table_attach(GTK_TABLE(conf_table), config_framedrop, 0, 3, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6694 i++;
6695
6696 config_forcecache = gtk_check_button_new_with_label(_("Enable mplayer cache"));
6697 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(config_forcecache), forcecache);
6698 gtk_table_attach(GTK_TABLE(conf_table), config_forcecache, 0, 3, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6699 g_signal_connect(G_OBJECT(config_forcecache), "toggled", G_CALLBACK(config_forcecache_callback), NULL);
6700 i++;
6701
6702 conf_label = gtk_label_new(_("Cache Size (KB):"));
6703 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6704 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6705 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6706 gtk_widget_show(conf_label);
6707 config_cachesize = gtk_spin_button_new_with_range(32, 256 * 1024, 512);
6708 #ifdef GTK2_12_ENABLED
6709 gtk_widget_set_tooltip_text(config_cachesize, _
6710 ("Amount of data to cache when playing media, use higher values for slow devices and sites."));
6711 #else
6712 tooltip = gtk_tooltips_new();
6713 gtk_tooltips_set_tip(tooltip, config_cachesize, _
6714 ("Amount of data to cache when playing media, use higher values for slow devices and sites."),
6715 NULL);
6716 #endif
6717 gtk_widget_set_size_request(config_cachesize, 100, -1);
6718 gtk_table_attach(GTK_TABLE(conf_table), config_cachesize, 2, 3, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6719 //gtk_range_set_value(GTK_RANGE(config_cachesize), cache_size);
6720 gtk_spin_button_set_value(GTK_SPIN_BUTTON(config_cachesize), cache_size);
6721 gtk_entry_set_width_chars(GTK_ENTRY(config_cachesize), 6);
6722 #ifndef GTK2_24_ENABLED
6723 gtk_entry_set_editable(GTK_ENTRY(config_cachesize), FALSE);
6724 #endif
6725 gtk_entry_set_alignment(GTK_ENTRY(config_cachesize), 1);
6726 gtk_widget_show(config_cachesize);
6727 gtk_widget_set_sensitive(config_cachesize, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(config_forcecache)));
6728 i++;
6729
6730 conf_label = gtk_label_new("");
6731 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6732 i++;
6733
6734 conf_label = gtk_label_new(_("MPlayer Executable:"));
6735 config_mplayer_bin = gtk_file_chooser_button_new("Select", GTK_FILE_CHOOSER_ACTION_OPEN);
6736 #ifdef GTK2_12_ENABLED
6737 gtk_widget_set_tooltip_text(config_mplayer_bin, _
6738 ("Use this option to specify a mplayer application that is not in the path"));
6739 #else
6740 tooltip = gtk_tooltips_new();
6741 gtk_tooltips_set_tip(tooltip, config_mplayer_bin, _
6742 ("Use this option to specify a mplayer application that is not in the path"), NULL);
6743 #endif
6744 if (mplayer_bin != NULL)
6745 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(config_mplayer_bin), mplayer_bin);
6746 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6747 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6748 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6749 i++;
6750 gtk_table_attach(GTK_TABLE(conf_table), config_mplayer_bin, 0, 3, i, i + 1,
6751 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6752 i++;
6753
6754 conf_label = gtk_label_new("");
6755 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6756 i++;
6757
6758 conf_label = gtk_label_new(_("Extra Options to MPlayer:"));
6759 config_extraopts = gtk_entry_new();
6760 #ifdef GTK2_12_ENABLED
6761 gtk_widget_set_tooltip_text(config_extraopts, _("Add any extra mplayer options here (filters etc)"));
6762 #else
6763 tooltip = gtk_tooltips_new();
6764 gtk_tooltips_set_tip(tooltip, config_extraopts, _("Add any extra mplayer options here (filters etc)"), NULL);
6765 #endif
6766 gtk_entry_set_text(GTK_ENTRY(config_extraopts), ((extraopts) ? extraopts : ""));
6767 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6768 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6769 gtk_entry_set_width_chars(GTK_ENTRY(config_extraopts), 40);
6770 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6771 i++;
6772 gtk_table_attach(GTK_TABLE(conf_table), config_extraopts, 0, 3, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6773 i++;
6774
6775 conf_label = gtk_label_new(_("MPlayer Default Optical Device"));
6776 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6777 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6778 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 2, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6779 gtk_widget_show(conf_label);
6780 gtk_widget_set_size_request(GTK_WIDGET(config_mplayer_dvd_device), 200, -1);
6781 gtk_table_attach(GTK_TABLE(conf_table), config_mplayer_dvd_device, 2, 3, i, i + 1,
6782 GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6783 i++;
6784
6785
6786 // Page 7 - Keyboard Shortcuts
6787 conf_table = gtk_table_new(KEY_COUNT + 5, 3, FALSE);
6788 gtk_container_add(GTK_CONTAINER(conf_page7), conf_table);
6789 i = 0;
6790 conf_label = gtk_label_new(_("<span weight=\"bold\">Keyboard Shortcuts</span>\n\n"
6791 "Place the cursor in the box next to the shortcut you want to modify\n"
6792 "Then press the keys you would like for the shortcut"));
6793 gtk_label_set_use_markup(GTK_LABEL(conf_label), TRUE);
6794 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.0);
6795 gtk_misc_set_padding(GTK_MISC(conf_label), 0, 6);
6796 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 3, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK, 0, 0);
6797 i++;
6798
6799 for (j = 0; j < KEY_COUNT; j++) {
6800 conf_label = gtk_label_new(accel_keys_description[j]);
6801 gtk_misc_set_alignment(GTK_MISC(conf_label), 0.0, 0.5);
6802 gtk_misc_set_padding(GTK_MISC(conf_label), 12, 0);
6803 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 0, 1, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6804 gtk_widget_show(conf_label);
6805
6806 config_accel_keys[j] = gtk_entry_new();
6807
6808 if (get_key_and_modifier(accel_keys[j], &key, &modifier)) {
6809 gtk_entry_set_text(GTK_ENTRY(config_accel_keys[j]),
6810 g_strdup_printf("%s%s%s%s", (modifier & GDK_CONTROL_MASK) ? "Control-" : "",
6811 (modifier & GDK_MOD1_MASK) ? "Alt-" : "",
6812 (modifier & GDK_SHIFT_MASK) ? "Shift-" : "", gdk_keyval_name(key)));
6813 }
6814 g_signal_connect(G_OBJECT(config_accel_keys[j]), "key_press_event", G_CALLBACK(accel_key_key_press_event),
6815 GINT_TO_POINTER(j));
6816 gtk_widget_set_size_request(GTK_WIDGET(config_accel_keys[j]), 200, -1);
6817 gtk_table_attach(GTK_TABLE(conf_table), config_accel_keys[j], 1, 2, i, i + 1, GTK_FILL | GTK_EXPAND, GTK_SHRINK,
6818 0, 0);
6819
6820 i++;
6821 }
6822 conf_label = gtk_button_new_with_label(_("Reset Keys"));
6823 g_signal_connect(G_OBJECT(conf_label), "clicked", G_CALLBACK(reset_keys_callback), NULL);
6824 gtk_table_attach(GTK_TABLE(conf_table), conf_label, 3, 4, i, i + 1, GTK_FILL, GTK_SHRINK, 0, 0);
6825 i++;
6826
6827 gtk_container_add(GTK_CONTAINER(conf_hbutton_box), conf_cancel);
6828 gtk_container_add(GTK_CONTAINER(conf_vbox), conf_hbutton_box);
6829
6830 gtk_widget_show_all(config_window);
6831 gtk_window_set_transient_for(GTK_WINDOW(config_window), GTK_WINDOW(window));
6832 gtk_window_set_keep_above(GTK_WINDOW(config_window), keep_on_top);
6833 gtk_window_present(GTK_WINDOW(config_window));
6834
6835 }
6836
reset_keys_callback(GtkButton * button,gpointer data)6837 void reset_keys_callback(GtkButton * button, gpointer data)
6838 {
6839 gint j;
6840 guint key;
6841 GdkModifierType modifier;
6842
6843 for (j = 0; j < KEY_COUNT; j++) {
6844 g_free(accel_keys[j]);
6845 accel_keys[j] = NULL;
6846 }
6847
6848 assign_default_keys();
6849
6850 for (j = 0; j < KEY_COUNT; j++) {
6851 if (get_key_and_modifier(accel_keys[j], &key, &modifier)) {
6852 gtk_entry_set_text(GTK_ENTRY(config_accel_keys[j]),
6853 g_strdup_printf("%s%s%s%s", (modifier & GDK_CONTROL_MASK) ? "Control-" : "",
6854 (modifier & GDK_MOD1_MASK) ? "Alt-" : "",
6855 (modifier & GDK_SHIFT_MASK) ? "Shift-" : "", gdk_keyval_name(key)));
6856 }
6857 }
6858 }
6859
accel_key_key_press_event(GtkWidget * widget,GdkEventKey * event,gpointer data)6860 gboolean accel_key_key_press_event(GtkWidget * widget, GdkEventKey * event, gpointer data)
6861 {
6862
6863 gint index = GPOINTER_TO_INT(data);
6864
6865 gm_log(verbose, G_LOG_LEVEL_DEBUG, "key press %s shift: %s, ctrl: %s, alt: %s modifier: %s",
6866 gdk_keyval_name(event->keyval), gm_bool_to_string(event->state & GDK_SHIFT_MASK),
6867 gm_bool_to_string(event->state & GDK_CONTROL_MASK), gm_bool_to_string(event->state & GDK_MOD1_MASK),
6868 gm_bool_to_string(event->is_modifier));
6869
6870
6871 if (event->is_modifier)
6872 return TRUE;
6873
6874 event->state = event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK | GDK_SHIFT_MASK);
6875 gtk_entry_set_text(GTK_ENTRY(widget),
6876 g_strdup_printf("%s%s%s%s", (event->state & GDK_CONTROL_MASK) ? "Control-" : "",
6877 (event->state & GDK_MOD1_MASK) ? "Alt-" : "",
6878 (event->state & GDK_SHIFT_MASK) ? "Shift-" : "",
6879 gdk_keyval_name(event->keyval)));
6880
6881 g_free(accel_keys[index]);
6882 accel_keys[index] = g_strdup_printf("%i+%s", event->state, gdk_keyval_name(event->keyval));
6883 setup_accelerators();
6884
6885
6886 return TRUE;
6887 }
6888
6889
tracker_callback(GtkWidget * widget,gint percent,void * data)6890 gboolean tracker_callback(GtkWidget * widget, gint percent, void *data)
6891 {
6892
6893 if (!idledata->streaming) {
6894 if (!autopause) {
6895 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP) {
6896 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), (gdouble) percent / 100.0, SEEK_PERCENT);
6897 }
6898 }
6899 }
6900
6901 return FALSE;
6902 }
6903
subtitle_select_callback(GtkMenuItem * menu,gpointer data)6904 void subtitle_select_callback(GtkMenuItem * menu, gpointer data)
6905 {
6906 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu)))
6907 gmtk_media_player_select_subtitle_by_id(GMTK_MEDIA_PLAYER(media), GPOINTER_TO_INT(data));
6908 // use the id instead of the name
6909 //gmtk_media_player_select_subtitle(GMTK_MEDIA_PLAYER(media), gtk_menu_item_get_label(menu));
6910 }
6911
player_subtitle_callback(GmtkMediaPlayer * player,int count,gpointer data)6912 void player_subtitle_callback(GmtkMediaPlayer * player, int count, gpointer data)
6913 {
6914 GtkWidget *menuitem_select_subtitles = GTK_WIDGET(data);
6915 GtkWidget *sub;
6916 GList *iter;
6917 GmtkMediaPlayerSubtitle *subtitle;
6918 GSList *group = NULL;
6919
6920 subtitles = gtk_menu_new();
6921 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_select_subtitles), NULL);
6922
6923 if (g_list_length(player->subtitles)) {
6924 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_select_subtitles), subtitles);
6925
6926 iter = player->subtitles;
6927 while (iter) {
6928 subtitle = (GmtkMediaPlayerSubtitle *) iter->data;
6929 sub = gtk_radio_menu_item_new_with_label(group, subtitle->label);
6930 group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(sub));
6931 g_signal_connect(sub, "activate", G_CALLBACK(subtitle_select_callback), GINT_TO_POINTER(subtitle->id));
6932 gtk_menu_shell_append(GTK_MENU_SHELL(subtitles), sub);
6933 iter = iter->next;
6934 }
6935
6936 gtk_widget_show_all(subtitles);
6937 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_select_sub_lang), TRUE);
6938 }
6939
6940 }
6941
audio_track_select_callback(GtkMenuItem * menu,gpointer data)6942 void audio_track_select_callback(GtkMenuItem * menu, gpointer data)
6943 {
6944 if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu))) {
6945 #ifdef GTK2_18_ENABLED
6946 gmtk_media_player_select_audio_track(GMTK_MEDIA_PLAYER(media), gtk_menu_item_get_label(menu));
6947 #else
6948 gmtk_media_player_select_audio_track(GMTK_MEDIA_PLAYER(media),
6949 gtk_label_get_text(GTK_LABEL(GTK_BIN(menu)->child)));
6950 #endif
6951 }
6952 }
6953
player_audio_track_callback(GmtkMediaPlayer * player,int count,gpointer data)6954 void player_audio_track_callback(GmtkMediaPlayer * player, int count, gpointer data)
6955 {
6956 GtkWidget *menuitem_select_audio_track = GTK_WIDGET(data);
6957 GtkWidget *menuitem;
6958 GList *iter;
6959 GmtkMediaPlayerAudioTrack *audio_track;
6960 GSList *group = NULL;
6961 tracks = gtk_menu_new();
6962 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_select_audio_track), NULL);
6963 if (g_list_length(player->audio_tracks)) {
6964
6965 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_select_audio_track), tracks);
6966 iter = player->audio_tracks;
6967 while (iter) {
6968 audio_track = (GmtkMediaPlayerAudioTrack *) iter->data;
6969 menuitem = gtk_radio_menu_item_new_with_label(group, audio_track->label);
6970 group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem));
6971 g_signal_connect(menuitem, "activate",
6972 G_CALLBACK(audio_track_select_callback), GINT_TO_POINTER(audio_track->id));
6973 gtk_menu_shell_append(GTK_MENU_SHELL(tracks), menuitem);
6974 iter = iter->next;
6975 }
6976
6977 gtk_widget_show_all(tracks);
6978 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_select_audio_lang), TRUE);
6979 }
6980
6981 }
6982
player_attribute_changed_callback(GmtkMediaTracker * tracker,GmtkMediaPlayerMediaAttributes attribute)6983 void player_attribute_changed_callback(GmtkMediaTracker * tracker, GmtkMediaPlayerMediaAttributes attribute)
6984 {
6985 const gchar *name;
6986 GList *list;
6987 GtkMenuItem *item;
6988 gchar *text;
6989 gchar *title;
6990 gchar *buffer;
6991 MetaData *metadata;
6992 GtkTreeIter *citer = NULL;
6993
6994
6995 switch (attribute) {
6996 case ATTRIBUTE_LENGTH:
6997 if (GTK_IS_WIDGET(tracker)) {
6998 gmtk_media_tracker_set_length(GMTK_MEDIA_TRACKER(tracker),
6999 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), attribute));
7000 }
7001 #ifdef LIBGDA_ENABLED
7002 metadata = get_db_metadata(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)));
7003 #else
7004 metadata = g_new0(MetaData, 1);
7005 metadata->uri = g_strdup(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)));
7006 #endif
7007 metadata->length_value = gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), attribute);
7008 if (metadata->length)
7009 g_free(metadata->length);
7010 metadata->length =
7011 seconds_to_string(gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), attribute));
7012 #ifdef LIBGDA_ENABLED
7013 if (metadata->valid)
7014 insert_update_db_metadata(db_connection, metadata->uri, metadata);
7015 #endif
7016
7017 free_metadata(metadata);
7018
7019 break;
7020 case ATTRIBUTE_SIZE:
7021 if (remember_loc) {
7022 idledata->width = loc_window_width;
7023 idledata->height = loc_window_height;
7024 } else {
7025 idledata->width = (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_WIDTH);
7026 idledata->height =
7027 (gint) gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HEIGHT);
7028 }
7029 gm_log(verbose, G_LOG_LEVEL_DEBUG, "video present = %s new size %i x %i",
7030 gm_bool_to_string(idledata->videopresent), idledata->width, idledata->height);
7031 text = g_strdup_printf("%i x %i", idledata->width, idledata->height);
7032 gtk_label_set_text(GTK_LABEL(details_video_size), text);
7033 g_free(text);
7034 if (resize_on_new_media || idledata->videopresent == FALSE) {
7035 if (idledata->width > 0 && idledata->height > 0)
7036 idledata->videopresent = TRUE;
7037 g_idle_add(resize_window, idledata);
7038 }
7039 break;
7040 case ATTRIBUTE_VIDEO_PRESENT:
7041 idledata->videopresent =
7042 gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VIDEO_PRESENT);
7043 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_fullscreen), idledata->videopresent);
7044 gtk_widget_set_sensitive(GTK_WIDGET(fs_event_box), idledata->videopresent);
7045 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_subtitle), idledata->videopresent);
7046 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_audiofile), idledata->videopresent);
7047 #ifdef GTK3_ENABLED
7048 gtk_window_set_has_resize_grip(GTK_WINDOW(window), idledata->videopresent);
7049 #endif
7050 if (vo == NULL
7051 || (use_hardware_codecs == TRUE && (g_ascii_strncasecmp(vo, "xvmc", strlen("xvmc")) == 0
7052 || g_ascii_strncasecmp(vo, "vdpau", strlen("vdpau")) == 0))) {
7053 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_take_screenshot), FALSE);
7054 } else {
7055 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_take_screenshot), idledata->videopresent);
7056 }
7057 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_fullscreen), idledata->videopresent);
7058 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_onetoone), idledata->videopresent);
7059 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_onetotwo), idledata->videopresent);
7060 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_twotoone), idledata->videopresent);
7061 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_onetoonepointfive), idledata->videopresent);
7062 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_advanced), idledata->videopresent);
7063 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect), idledata->videopresent);
7064 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_default), idledata->videopresent);
7065 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_four_three), idledata->videopresent);
7066 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_sixteen_nine), idledata->videopresent);
7067 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_sixteen_ten), idledata->videopresent);
7068 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_anamorphic), idledata->videopresent);
7069 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_follow_window), idledata->videopresent);
7070 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBS_EXIST)) {
7071 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_subtitles), idledata->videopresent);
7072 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_smaller_subtitle), idledata->videopresent);
7073 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_larger_subtitle), idledata->videopresent);
7074 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_decrease_subtitle_delay), idledata->videopresent);
7075 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_increase_subtitle_delay), idledata->videopresent);
7076 } else {
7077 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_subtitles), FALSE);
7078 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_smaller_subtitle), FALSE);
7079 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_larger_subtitle), FALSE);
7080 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_decrease_subtitle_delay), FALSE);
7081 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_increase_subtitle_delay), FALSE);
7082 }
7083 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_angle), idledata->videopresent);
7084 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_advanced), idledata->videopresent);
7085 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_details), TRUE);
7086 if (resize_on_new_media || idledata->videopresent == FALSE) {
7087 if (idledata->width > 0 && idledata->height > 0)
7088 idledata->videopresent = TRUE;
7089 g_idle_add(resize_window, idledata);
7090 }
7091 break;
7092 case ATTRIBUTE_AUDIO_TRACK:
7093 name = gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_TRACK);
7094 gm_log(verbose, G_LOG_LEVEL_DEBUG, "track name = %s", name);
7095 if (name != NULL && GTK_IS_WIDGET(tracks)) {
7096 list = gtk_container_get_children(GTK_CONTAINER(tracks));
7097 while (list) {
7098 item = GTK_MENU_ITEM(list->data);
7099 #ifdef GTK2_18_ENABLED
7100 if (g_ascii_strcasecmp(name, gtk_menu_item_get_label(item)) == 0) {
7101 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE);
7102 }
7103 #else
7104 if (g_ascii_strcasecmp(name, gtk_label_get_text(GTK_LABEL(GTK_BIN(item)->child))) == 0) {
7105 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE);
7106 }
7107 #endif
7108 list = list->next;
7109 }
7110 }
7111 break;
7112 case ATTRIBUTE_AF_EXPORT_FILENAME:
7113 unmap_af_export_file(idledata);
7114 map_af_export_file(idledata);
7115 break;
7116 case ATTRIBUTE_SUBTITLE:
7117 name = gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUBTITLE);
7118 if (name != NULL && GTK_IS_WIDGET(subtitles)) {
7119 list = gtk_container_get_children(GTK_CONTAINER(subtitles));
7120 while (list) {
7121 item = GTK_MENU_ITEM(list->data);
7122 #ifdef GTK2_18_ENABLED
7123 if (g_ascii_strcasecmp(name, gtk_menu_item_get_label(item)) == 0) {
7124 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE);
7125 }
7126 #else
7127 if (g_ascii_strcasecmp(name, gtk_label_get_text(GTK_LABEL(GTK_BIN(item)->child))) == 0) {
7128 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE);
7129 }
7130 #endif
7131 list = list->next;
7132 }
7133 }
7134 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_subtitles),
7135 gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media),
7136 ATTRIBUTE_SUBS_EXIST));
7137
7138 break;
7139 case ATTRIBUTE_SUB_VISIBLE:
7140 if (showsubtitles) {
7141 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_subtitles),
7142 gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media),
7143 ATTRIBUTE_SUB_VISIBLE));
7144 }
7145 break;
7146 case ATTRIBUTE_HAS_CHAPTERS:
7147 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_HAS_CHAPTERS)
7148 || gtk_tree_model_iter_n_children(GTK_TREE_MODEL(playliststore), NULL) > 1) {
7149 gtk_widget_show_all(prev_event_box);
7150 gtk_widget_show_all(next_event_box);
7151 } else {
7152 gtk_widget_hide(prev_event_box);
7153 gtk_widget_hide(next_event_box);
7154 }
7155 break;
7156 case ATTRIBUTE_MESSAGE:
7157 gmtk_media_tracker_set_text(GMTK_MEDIA_TRACKER(tracker),
7158 gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media),
7159 ATTRIBUTE_MESSAGE));
7160 break;
7161 case ATTRIBUTE_VIDEO_FORMAT:
7162 text =
7163 g_ascii_strup(gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VIDEO_FORMAT), -1);
7164 gtk_label_set_text(GTK_LABEL(details_video_format), text);
7165 g_free(text);
7166 break;
7167 case ATTRIBUTE_VIDEO_CODEC:
7168 text =
7169 g_ascii_strup(gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VIDEO_CODEC), -1);
7170 gtk_label_set_text(GTK_LABEL(details_video_codec), text);
7171 g_free(text);
7172 break;
7173 case ATTRIBUTE_VIDEO_FPS:
7174 text =
7175 g_strdup_printf("%2.1lf",
7176 gmtk_media_player_get_attribute_double(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_VIDEO_FPS));
7177 gtk_label_set_text(GTK_LABEL(details_video_fps), text);
7178 g_free(text);
7179 break;
7180 case ATTRIBUTE_AUDIO_FORMAT:
7181 text =
7182 g_ascii_strup(gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_FORMAT), -1);
7183 gtk_label_set_text(GTK_LABEL(details_audio_format), text);
7184 g_free(text);
7185 break;
7186 case ATTRIBUTE_AUDIO_CODEC:
7187 text =
7188 g_ascii_strup(gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_CODEC), -1);
7189 gtk_label_set_text(GTK_LABEL(details_audio_codec), text);
7190 g_free(text);
7191 break;
7192 case ATTRIBUTE_VIDEO_BITRATE:
7193 text =
7194 g_strdup_printf("%i Kb/s",
7195 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media),
7196 ATTRIBUTE_VIDEO_BITRATE) / 1000);
7197 gtk_label_set_text(GTK_LABEL(details_video_bitrate), text);
7198 g_free(text);
7199 break;
7200 case ATTRIBUTE_AUDIO_BITRATE:
7201 text =
7202 g_strdup_printf("%i Kb/s",
7203 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media),
7204 ATTRIBUTE_AUDIO_BITRATE) / 1000);
7205 gtk_label_set_text(GTK_LABEL(details_audio_bitrate), text);
7206 g_free(text);
7207 break;
7208 case ATTRIBUTE_AUDIO_RATE:
7209 text =
7210 g_strdup_printf("%i KHz",
7211 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media),
7212 ATTRIBUTE_AUDIO_RATE) / 1000);
7213 gtk_label_set_text(GTK_LABEL(details_audio_samplerate), text);
7214 g_free(text);
7215 break;
7216 case ATTRIBUTE_AUDIO_NCH:
7217 text =
7218 g_strdup_printf("%i",
7219 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_AUDIO_NCH));
7220 gtk_label_set_text(GTK_LABEL(details_audio_channels), text);
7221 g_free(text);
7222 break;
7223 case ATTRIBUTE_CHAPTERS:
7224 text =
7225 g_strdup_printf("%i",
7226 gmtk_media_player_get_attribute_integer(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_CHAPTERS));
7227 gtk_label_set_text(GTK_LABEL(details_video_chapters), text);
7228 g_free(text);
7229 break;
7230 case ATTRIBUTE_SEEKABLE:
7231 gtk_widget_set_sensitive(GTK_WIDGET(tracker),
7232 gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SEEKABLE));
7233 break;
7234 case ATTRIBUTE_START_TIME:
7235 break;
7236 case ATTRIBUTE_TITLE:
7237 case ATTRIBUTE_ARTIST:
7238 case ATTRIBUTE_ALBUM:
7239 #ifdef LIBGDA_ENABLED
7240 metadata = get_db_metadata(db_connection, gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)));
7241 #else
7242 metadata = g_new0(MetaData, 1);
7243 metadata->uri = g_strdup(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)));
7244 #endif
7245
7246 text = g_strdup_printf("<small>\n");
7247 if (gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE)) {
7248 buffer =
7249 g_markup_printf_escaped("\t<big><b>%s</b></big>\n",
7250 gmtk_media_player_get_attribute_string
7251 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE));
7252 text = g_strconcat(text, buffer, NULL);
7253 g_free(buffer);
7254 if (metadata->title)
7255 g_free(metadata->title);
7256 metadata->title =
7257 g_strstrip(g_strdup(gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE)));
7258 if (metadata->title != NULL && strlen(metadata->title) > 0) {
7259 title = g_strdup_printf(_("%s - GNOME MPlayer"), metadata->title);
7260 gtk_window_set_title(GTK_WINDOW(window), title);
7261 g_free(title);
7262 }
7263 }
7264
7265 if (gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ARTIST)) {
7266 buffer =
7267 g_markup_printf_escaped("\t<i>%s</i>\n",
7268 gmtk_media_player_get_attribute_string
7269 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ARTIST));
7270 text = g_strconcat(text, buffer, NULL);
7271 g_free(buffer);
7272 if (metadata->artist)
7273 g_free(metadata->artist);
7274 metadata->artist =
7275 g_strstrip(g_strdup
7276 (gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ARTIST)));
7277 }
7278
7279 if (gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ALBUM)) {
7280 buffer =
7281 g_markup_printf_escaped("\t%s\n",
7282 gmtk_media_player_get_attribute_string
7283 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ALBUM));
7284 text = g_strconcat(text, buffer, NULL);
7285 g_free(buffer);
7286 if (metadata->album)
7287 g_free(metadata->album);
7288 metadata->album =
7289 g_strstrip(g_strdup(gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ALBUM)));
7290 }
7291 #ifdef LIBGDA_ENABLED
7292 if (metadata->valid)
7293 insert_update_db_metadata(db_connection, metadata->uri, metadata);
7294 #endif
7295
7296 free_metadata(metadata);
7297
7298 text = g_strconcat(text, "</small>", NULL);
7299 gtk_label_set_markup(GTK_LABEL(media_label), text);
7300 g_strlcpy(idledata->media_info, text, sizeof(idledata->media_info));
7301
7302 citer = find_iter_by_uri(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)));
7303 if (gtk_list_store_iter_is_valid(playliststore, citer) && !g_thread_pool_unprocessed(retrieve_metadata_pool)) {
7304 switch (attribute) {
7305 case ATTRIBUTE_TITLE:
7306 gtk_list_store_set(playliststore, citer, DESCRIPTION_COLUMN, gmtk_media_player_get_attribute_string
7307 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE), -1);
7308 break;
7309 case ATTRIBUTE_ARTIST:
7310 gtk_list_store_set(playliststore, citer, ARTIST_COLUMN, gmtk_media_player_get_attribute_string
7311 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ARTIST), -1);
7312 break;
7313
7314 case ATTRIBUTE_ALBUM:
7315 gtk_list_store_set(playliststore, citer, ALBUM_COLUMN, gmtk_media_player_get_attribute_string
7316 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_ALBUM), -1);
7317 break;
7318 default:
7319 break;
7320 }
7321 }
7322 g_free(citer);
7323 break;
7324
7325 case ATTRIBUTE_RETRY_ON_FULL_CACHE:
7326 idledata->retry_on_full_cache =
7327 gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_RETRY_ON_FULL_CACHE);
7328 break;
7329
7330 case ATTRIBUTE_SPEED_SET:
7331 mpris_send_signal_RateChanged();
7332 break;
7333
7334 default:
7335 gm_log(verbose, G_LOG_LEVEL_INFO, "Unhandled attribute change %i", attribute);
7336 }
7337
7338 mpris_send_signal_Updated_Metadata();
7339 }
7340
player_media_state_changed_callback(GtkButton * button,GmtkMediaPlayerMediaState media_state,gpointer data)7341 void player_media_state_changed_callback(GtkButton * button, GmtkMediaPlayerMediaState media_state, gpointer data)
7342 {
7343 #ifdef GTK2_12_ENABLED
7344 gchar *tip_text = NULL;
7345 #endif
7346 gchar *short_filename = NULL;
7347 #ifdef GTK3_ENABLED
7348 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
7349 const gchar *icon_start;
7350
7351 if (gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL)
7352 icon_start = "media-playback-start-rtl-symbolic";
7353 else
7354 icon_start = "media-playback-start-symbolic";
7355 #endif
7356
7357 gm_log(verbose, G_LOG_LEVEL_DEBUG, "in media state change with state = %s dontplaynext = %i",
7358 gmtk_media_state_to_string(media_state), dontplaynext);
7359 switch (media_state) {
7360 // mplayer is dead, need the next item off the playlist
7361 case MEDIA_STATE_QUIT:
7362 case MEDIA_STATE_UNKNOWN:
7363 if (idledata->mapped_af_export != NULL)
7364 unmap_af_export_file(idledata);
7365 if (dontplaynext == FALSE
7366 && gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_edit_play_single)) == FALSE) {
7367 if (next_item_in_playlist(&iter)) {
7368 g_idle_add(async_play_iter, &iter);
7369 //play_iter(&iter, 0);
7370 } else {
7371 gm_log(verbose, G_LOG_LEVEL_DEBUG, "end of thread playlist is empty");
7372 if (loop) {
7373 if (is_first_item_in_playlist(&iter)) {
7374 g_idle_add(async_play_iter, &iter);
7375 }
7376 } else {
7377 idledata->fullscreen = 0;
7378 g_idle_add(set_fullscreen, idledata);
7379 g_idle_add(set_stop, idledata);
7380 // nothing is on the playlist and we are not looping so ask plugin for next item
7381 if (embed_window != 0 || control_id != 0) {
7382 js_state = STATE_MEDIAENDED;
7383 dbus_send_event("MediaComplete", 0);
7384 dbus_open_next();
7385 }
7386 }
7387
7388 if (quit_on_complete) {
7389 g_idle_add(set_quit, idledata);
7390 }
7391 }
7392 } else {
7393 if (embed_window != 0 || control_id != 0) {
7394 dbus_send_event("MediaComplete", 0);
7395 dbus_open_next();
7396 }
7397 if (next_iter != NULL) {
7398 g_idle_add(async_play_iter, next_iter);
7399 next_iter = NULL;
7400 }
7401 }
7402 dontplaynext = FALSE;
7403 // break purposely not put here, so gui is properly updated
7404 case MEDIA_STATE_STOP:
7405 #ifdef GTK3_ENABLED
7406 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
7407 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
7408 } else {
7409 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
7410 }
7411 #else
7412 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
7413 #endif
7414 gmtk_media_tracker_set_position(GMTK_MEDIA_TRACKER(tracker), 0.0);
7415 #ifdef GTK2_12_ENABLED
7416 tip_text = gtk_widget_get_tooltip_text(play_event_box);
7417 if (tip_text == NULL || g_ascii_strcasecmp(tip_text, _("Play")) != 0)
7418 gtk_widget_set_tooltip_text(play_event_box, _("Play"));
7419 g_free(tip_text);
7420 #else
7421 gtk_tooltips_set_tip(tooltip, play_event_box, _("Play"), NULL);
7422 #endif
7423 gtk_widget_set_sensitive(ff_event_box, FALSE);
7424 gtk_widget_set_sensitive(rew_event_box, FALSE);
7425 gtk_widget_set_sensitive(prev_event_box, FALSE);
7426 gtk_widget_set_sensitive(next_event_box, FALSE);
7427 gtk_widget_set_sensitive(stop_event_box, FALSE);
7428
7429 if (GTK_WIDGET(gtk_widget_get_parent(GTK_WIDGET(menuitem_play))) == GTK_WIDGET(popup_menu))
7430 gtk_container_remove(GTK_CONTAINER(popup_menu), GTK_WIDGET(menuitem_play));
7431 menuitem_play = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PLAY, NULL));
7432 g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_play_callback), NULL);
7433 gtk_menu_shell_insert(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_play), 0);
7434 gtk_widget_show(GTK_WIDGET(menuitem_play));
7435 dbus_enable_screensaver();
7436 dbus_send_event("MediaStopped", 0);
7437 g_strlcpy(idledata->media_info, "", sizeof(idledata->media_info));
7438 gtk_widget_hide(media_hbox);
7439 g_strlcpy(idledata->display_name, "", sizeof(idledata->display_name));
7440 g_idle_add(set_title_bar, idledata);
7441 break;
7442 case MEDIA_STATE_PLAY:
7443 if (idledata->mapped_af_export == NULL)
7444 map_af_export_file(idledata);
7445 #ifdef GTK3_ENABLED
7446 if (gtk_icon_theme_has_icon(icon_theme, "media-playback-pause-symbolic")) {
7447 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), "media-playback-pause-symbolic", button_size);
7448 } else {
7449 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
7450 }
7451 #else
7452 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PAUSE, button_size);
7453 #endif
7454 #ifdef GTK2_12_ENABLED
7455 tip_text = gtk_widget_get_tooltip_text(play_event_box);
7456 if (tip_text == NULL || g_ascii_strcasecmp(tip_text, _("Pause")) != 0)
7457 gtk_widget_set_tooltip_text(play_event_box, _("Pause"));
7458 g_free(tip_text);
7459 #else
7460 gtk_tooltips_set_tip(tooltip, play_event_box, _("Pause"), NULL);
7461 #endif
7462 gtk_widget_set_sensitive(ff_event_box, TRUE);
7463 gtk_widget_set_sensitive(rew_event_box, TRUE);
7464 gtk_widget_set_sensitive(prev_event_box, TRUE);
7465 gtk_widget_set_sensitive(next_event_box, TRUE);
7466 gtk_widget_set_sensitive(stop_event_box, TRUE);
7467
7468 if (GTK_WIDGET(gtk_widget_get_parent(GTK_WIDGET(menuitem_play))) == GTK_WIDGET(popup_menu))
7469 gtk_container_remove(GTK_CONTAINER(popup_menu), GTK_WIDGET(menuitem_play));
7470 menuitem_play = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PAUSE, NULL));
7471 g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_pause_callback), NULL);
7472 gtk_menu_shell_insert(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_play), 0);
7473 gtk_widget_show(GTK_WIDGET(menuitem_play));
7474 if (idledata->videopresent)
7475 dbus_disable_screensaver();
7476 gmtk_media_tracker_set_text(GMTK_MEDIA_TRACKER(tracker), _("Playing"));
7477 gmtk_media_player_set_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SUB_VISIBLE,
7478 gtk_check_menu_item_get_active(menuitem_view_subtitles));
7479 dbus_send_event("MediaPlaying", 0);
7480 g_idle_add(set_media_label, idledata);
7481 if (gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE) != NULL) {
7482 g_strlcpy(idledata->display_name,
7483 gmtk_media_player_get_attribute_string(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_TITLE),
7484 sizeof(idledata->display_name));
7485 } else {
7486 short_filename = g_strrstr(gmtk_media_player_get_uri(GMTK_MEDIA_PLAYER(media)), "/");
7487 if (short_filename != NULL) {
7488 g_strlcpy(idledata->display_name, short_filename + sizeof(gchar), sizeof(idledata->display_name));
7489 } else {
7490 g_strlcpy(idledata->display_name, "", sizeof(idledata->display_name));
7491 }
7492 }
7493 g_idle_add(set_title_bar, idledata);
7494 break;
7495 case MEDIA_STATE_PAUSE:
7496 #ifdef GTK3_ENABLED
7497 if (gtk_icon_theme_has_icon(icon_theme, icon_start)) {
7498 gtk_image_set_from_icon_name(GTK_IMAGE(image_play), icon_start, button_size);
7499 } else {
7500 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
7501 }
7502 #else
7503 gtk_image_set_from_stock(GTK_IMAGE(image_play), GTK_STOCK_MEDIA_PLAY, button_size);
7504 #endif
7505 #ifdef GTK2_12_ENABLED
7506 tip_text = gtk_widget_get_tooltip_text(play_event_box);
7507 if (tip_text == NULL || g_ascii_strcasecmp(tip_text, _("Play")) != 0)
7508 gtk_widget_set_tooltip_text(play_event_box, _("Play"));
7509 g_free(tip_text);
7510 #else
7511 gtk_tooltips_set_tip(tooltip, play_event_box, _("Play"), NULL);
7512 #endif
7513 gtk_widget_set_sensitive(ff_event_box, FALSE);
7514 gtk_widget_set_sensitive(rew_event_box, FALSE);
7515 gtk_widget_set_sensitive(prev_event_box, FALSE);
7516 gtk_widget_set_sensitive(next_event_box, FALSE);
7517 gtk_widget_set_sensitive(stop_event_box, FALSE);
7518
7519 if (GTK_WIDGET(gtk_widget_get_parent(GTK_WIDGET(menuitem_play))) == GTK_WIDGET(popup_menu))
7520 gtk_container_remove(GTK_CONTAINER(popup_menu), GTK_WIDGET(menuitem_play));
7521 menuitem_play = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PLAY, NULL));
7522 g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_play_callback), NULL);
7523 gtk_menu_shell_insert(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_play), 0);
7524 gtk_widget_show(GTK_WIDGET(menuitem_play));
7525 dbus_enable_screensaver();
7526 gmtk_media_tracker_set_text(GMTK_MEDIA_TRACKER(tracker), _("Paused"));
7527 dbus_send_event("MediaPaused", 0);
7528 break;
7529 default:
7530 break;
7531 }
7532
7533 mpris_send_signal_PlaybackStatus();
7534 }
7535
player_error_message_callback(GmtkMediaPlayer * media,gchar * message)7536 void player_error_message_callback(GmtkMediaPlayer * media, gchar * message)
7537 {
7538 GtkWidget *dialog;
7539
7540 // log messages to the screen when in normal playback mode, and to the log when in plugin mode
7541 if (control_id == 0) {
7542 dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
7543 GTK_BUTTONS_CLOSE, "%s", message);
7544 gtk_window_set_title(GTK_WINDOW(dialog), g_dgettext(GETTEXT_PACKAGE, "GNOME MPlayer Error"));
7545 gtk_dialog_run(GTK_DIALOG(dialog));
7546 gtk_widget_destroy(dialog);
7547 } else {
7548 gm_log(TRUE, G_LOG_LEVEL_MESSAGE, "GNOME MPlayer Error: %s", message);
7549 }
7550 }
7551
player_cache_percent_changed_callback(GmtkMediaTracker * tracker,gdouble percentage)7552 void player_cache_percent_changed_callback(GmtkMediaTracker * tracker, gdouble percentage)
7553 {
7554 gchar *text;
7555 if (GTK_IS_WIDGET(tracker)) {
7556 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_PLAY) {
7557 gmtk_media_tracker_set_cache_percentage(tracker, percentage);
7558 text = g_strdup_printf("Caching %2i%% \342\226\274", (int) (percentage * 100));
7559 gmtk_media_tracker_set_text(GMTK_MEDIA_TRACKER(tracker), text);
7560 g_free(text);
7561 } else {
7562 gmtk_media_tracker_set_cache_percentage(tracker, 0.0);
7563 }
7564 }
7565 }
7566
player_position_changed_callback(GmtkMediaTracker * tracker,gdouble position)7567 void player_position_changed_callback(GmtkMediaTracker * tracker, gdouble position)
7568 {
7569 gchar *text;
7570 if (GTK_IS_WIDGET(tracker)) {
7571 gmtk_media_tracker_set_percentage(tracker,
7572 (position -
7573 gmtk_media_player_get_attribute_double
7574 (GMTK_MEDIA_PLAYER(media),
7575 ATTRIBUTE_START_TIME)) /
7576 gmtk_media_player_get_attribute_double
7577 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_LENGTH));
7578 gmtk_media_tracker_set_position(tracker,
7579 position -
7580 gmtk_media_player_get_attribute_double
7581 (GMTK_MEDIA_PLAYER(media), ATTRIBUTE_START_TIME));
7582 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PLAY) {
7583 text = g_strdup_printf(_("Playing"));
7584 } else if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) == MEDIA_STATE_PAUSE) {
7585 text = g_strdup_printf(_("Paused"));
7586 } else {
7587 text = g_strdup_printf(_("Idle"));
7588 }
7589 gmtk_media_tracker_set_text(GMTK_MEDIA_TRACKER(tracker), text);
7590 g_free(text);
7591 update_status_icon();
7592 g_idle_add(make_panel_and_mouse_invisible, NULL);
7593 dbus_send_event("TimeChanged", 0);
7594 }
7595 }
7596
tracker_value_changed_callback(GtkWidget * widget,gint value,gpointer data)7597 gboolean tracker_value_changed_callback(GtkWidget * widget, gint value, gpointer data)
7598 {
7599 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SEEKABLE)) {
7600 if (!autopause) {
7601 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP) {
7602 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), value * 1.0, SEEK_PERCENT);
7603 mpris_send_signal_Seeked();
7604 }
7605 }
7606 }
7607 return FALSE;
7608 }
7609
tracker_difference_callback(GtkWidget * widget,gdouble difference,void * data)7610 gboolean tracker_difference_callback(GtkWidget * widget, gdouble difference, void *data)
7611 {
7612
7613 if (gmtk_media_player_get_attribute_boolean(GMTK_MEDIA_PLAYER(media), ATTRIBUTE_SEEKABLE)) {
7614 if (!autopause) {
7615 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_STOP) {
7616 gmtk_media_player_seek(GMTK_MEDIA_PLAYER(media), difference, SEEK_RELATIVE);
7617 mpris_send_signal_Seeked();
7618 }
7619 }
7620 }
7621
7622 return FALSE;
7623 }
7624
progress_callback(GtkWidget * widget,GdkEventButton * event,void * data)7625 gboolean progress_callback(GtkWidget * widget, GdkEventButton * event, void *data)
7626 {
7627 GdkEventButton *event_button;
7628 if (event->type == GDK_BUTTON_PRESS) {
7629 event_button = (GdkEventButton *) event;
7630 if (event_button->button == 3) {
7631 gtk_menu_popup(popup_menu, NULL, NULL, NULL, NULL, event_button->button, event_button->time);
7632 return TRUE;
7633 }
7634 }
7635
7636 return TRUE;
7637 }
7638
load_href_callback(GtkWidget * widget,GdkEventExpose * event,gchar * hrefid)7639 gboolean load_href_callback(GtkWidget * widget, GdkEventExpose * event, gchar * hrefid)
7640 {
7641 GdkEventButton *event_button;
7642 if (event->type == GDK_BUTTON_PRESS) {
7643 event_button = (GdkEventButton *) event;
7644 if (event_button->button == 3) {
7645 gtk_menu_popup(popup_menu, NULL, NULL, NULL, NULL, event_button->button, event_button->time);
7646 return TRUE;
7647 }
7648
7649 if (event_button->button != 3) {
7650 dbus_open_by_hrefid(hrefid);
7651 // do this in the plugin when we should
7652 // gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols), TRUE);
7653 return TRUE;
7654 }
7655 }
7656
7657 return FALSE;
7658 }
7659
idle_make_button(gpointer data)7660 gboolean idle_make_button(gpointer data)
7661 {
7662 ButtonDef *b = (ButtonDef *) data;
7663 if (b != NULL) {
7664 make_button(b->uri, b->hrefid);
7665 g_free(b->uri);
7666 g_free(b->hrefid);
7667 g_free(b);
7668 }
7669
7670 return FALSE;
7671 }
7672
make_button(gchar * src,gchar * hrefid)7673 void make_button(gchar * src, gchar * hrefid)
7674 {
7675 GError *error;
7676 gchar *dirname = NULL;
7677 gchar *filename = NULL;
7678 gchar *basepath = NULL;
7679 gint exit_status;
7680 gchar *out = NULL;
7681 gchar *err = NULL;
7682 gchar *av[255];
7683 gint ac = 0;
7684 idledata->showcontrols = FALSE;
7685 showcontrols = FALSE;
7686 set_show_controls(idledata);
7687 error = NULL;
7688 // only try if src ne NULL
7689 if (src != NULL) {
7690 pb_button = gdk_pixbuf_new_from_file(src, &error);
7691 } else {
7692 return;
7693 }
7694
7695 // if we can't directly load the file into a pixbuf it might be a media file
7696 if (error != NULL) {
7697 g_error_free(error);
7698 error = NULL;
7699 basepath = g_strdup_printf("%s/gnome-mplayer/plugin", g_get_user_cache_dir());
7700 dirname = gm_tempname(basepath, "gnome-mplayerXXXXXX");
7701 filename = g_strdup_printf("%s/00000001.jpg", dirname);
7702 g_free(basepath);
7703 // run mplayer and try to get the first frame and convert it to a jpeg
7704 av[ac++] = g_strdup_printf("mplayer");
7705 av[ac++] = g_strdup_printf("-vo");
7706 av[ac++] = g_strdup_printf("jpeg:outdir=%s", dirname);
7707 av[ac++] = g_strdup_printf("-ao");
7708 av[ac++] = g_strdup_printf("null");
7709 av[ac++] = g_strdup_printf("-x");
7710 av[ac++] = g_strdup_printf("%i", window_x);
7711 av[ac++] = g_strdup_printf("-y");
7712 av[ac++] = g_strdup_printf("%i", window_y);
7713 av[ac++] = g_strdup_printf("-frames");
7714 av[ac++] = g_strdup_printf("1");
7715 av[ac++] = g_strdup_printf("%s", src);
7716 av[ac] = NULL;
7717 g_spawn_sync(NULL, av, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &out, &err, &exit_status, &error);
7718 if (error != NULL) {
7719 gm_log(verbose, G_LOG_LEVEL_MESSAGE, "Error when running: %s", error->message);
7720 g_error_free(error);
7721 error = NULL;
7722 }
7723
7724 if (g_file_test(filename, G_FILE_TEST_EXISTS)) {
7725 pb_button = gdk_pixbuf_new_from_file(filename, &error);
7726 if (error != NULL) {
7727 gm_log(verbose, G_LOG_LEVEL_MESSAGE, "make_button error: %s", error->message);
7728 g_error_free(error);
7729 error = NULL;
7730 }
7731 }
7732
7733 if (err != NULL)
7734 g_free(err);
7735 if (out != NULL)
7736 g_free(out);
7737 }
7738
7739 if (pb_button != NULL && GDK_IS_PIXBUF(pb_button)) {
7740 button_event_box = gtk_event_box_new();
7741 image_button = gtk_image_new_from_pixbuf(pb_button);
7742 gtk_container_add(GTK_CONTAINER(button_event_box), image_button);
7743 gtk_box_pack_start(GTK_BOX(vbox), button_event_box, FALSE, FALSE, 0);
7744 g_signal_connect(G_OBJECT(button_event_box), "button_press_event",
7745 G_CALLBACK(load_href_callback), g_strdup(hrefid));
7746 gtk_widget_set_size_request(GTK_WIDGET(button_event_box), window_x, window_y);
7747 gtk_widget_show_all(button_event_box);
7748 gtk_widget_set_size_request(controls_box, 0, 0);
7749 gtk_widget_hide(controls_box);
7750 gtk_widget_show(vbox);
7751 } else {
7752 gm_log(verbose, G_LOG_LEVEL_INFO, "unable to make button from media, using default");
7753 button_event_box = gtk_event_box_new();
7754 image_button = gtk_image_new_from_pixbuf(pb_icon);
7755 gtk_container_add(GTK_CONTAINER(button_event_box), image_button);
7756 gtk_box_pack_start(GTK_BOX(vbox), button_event_box, FALSE, FALSE, 0);
7757 g_signal_connect(G_OBJECT(button_event_box), "button_press_event",
7758 G_CALLBACK(load_href_callback), g_strdup(hrefid));
7759 gtk_widget_show_all(button_event_box);
7760 gtk_widget_set_size_request(controls_box, 0, 0);
7761 gtk_widget_hide(controls_box);
7762 gtk_widget_show(vbox);
7763 }
7764
7765 if (filename != NULL) {
7766 if (g_file_test(filename, G_FILE_TEST_EXISTS))
7767 g_remove(filename);
7768 g_free(filename);
7769 }
7770
7771 if (dirname != NULL) {
7772 g_remove(dirname);
7773 g_free(dirname);
7774 }
7775
7776 }
7777
get_key_and_modifier(gchar * keyval,guint * key,GdkModifierType * modifier)7778 gboolean get_key_and_modifier(gchar * keyval, guint * key, GdkModifierType * modifier)
7779 {
7780 gchar **parse;
7781
7782 if (keyval == NULL) {
7783 *key = 0;
7784 *modifier = 0;
7785 return FALSE;
7786 }
7787 gm_log(verbose, G_LOG_LEVEL_DEBUG, "keyval = %s", keyval);
7788 parse = g_strsplit(keyval, "+", -1);
7789 if (g_strv_length(parse) == 1) {
7790 *modifier = 0;
7791 *key = gdk_keyval_from_name(parse[0]);
7792 } else {
7793 *modifier = (guint) g_strtod(parse[0], NULL);
7794 *key = gdk_keyval_from_name(parse[1]);
7795 }
7796 g_strfreev(parse);
7797 gm_log(verbose, G_LOG_LEVEL_DEBUG, "key = %i, modifier = %i", *key, *modifier);
7798 return TRUE;
7799 }
7800
get_index_from_key_and_modifier(guint key,GdkModifierType modifier)7801 gint get_index_from_key_and_modifier(guint key, GdkModifierType modifier)
7802 {
7803 gint i;
7804 gint index = -1;
7805 gchar *keyval = NULL;
7806
7807 modifier = modifier & (GDK_SHIFT_MASK | GDK_MOD1_MASK | GDK_CONTROL_MASK);
7808 if (modifier == 0) {
7809 keyval = g_strdup_printf("%s", gdk_keyval_name(key));
7810 } else {
7811 keyval = g_strdup_printf("%i+%s", modifier, gdk_keyval_name(key));
7812 }
7813
7814 for (i = 0; i < KEY_COUNT; i++) {
7815 gm_log(verbose, G_LOG_LEVEL_DEBUG, "%s ?= %s", accel_keys[i], keyval);
7816 if (g_ascii_strcasecmp(accel_keys[i], keyval) == 0) {
7817 index = i;
7818 break;
7819 }
7820 }
7821
7822 g_free(keyval);
7823
7824 return index;
7825 }
7826
setup_accelerators()7827 void setup_accelerators()
7828 {
7829 guint key;
7830 GdkModifierType modifier;
7831
7832 if (get_key_and_modifier(accel_keys[FILE_OPEN_LOCATION], &key, &modifier))
7833 gtk_accel_map_change_entry(ACCEL_PATH_OPEN_LOCATION, key, modifier, TRUE);
7834
7835 if (get_key_and_modifier(accel_keys[EDIT_SCREENSHOT], &key, &modifier))
7836 gtk_accel_map_change_entry(ACCEL_PATH_EDIT_SCREENSHOT, key, modifier, TRUE);
7837
7838 if (get_key_and_modifier(accel_keys[EDIT_PREFERENCES], &key, &modifier))
7839 gtk_accel_map_change_entry(ACCEL_PATH_EDIT_PREFERENCES, key, modifier, TRUE);
7840
7841 if (get_key_and_modifier(accel_keys[VIEW_PLAYLIST], &key, &modifier))
7842 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_PLAYLIST, key, modifier, TRUE);
7843 if (get_key_and_modifier(accel_keys[VIEW_INFO], &key, &modifier))
7844 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_INFO, key, modifier, TRUE);
7845 if (get_key_and_modifier(accel_keys[VIEW_DETAILS], &key, &modifier))
7846 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_DETAILS, key, modifier, TRUE);
7847 if (get_key_and_modifier(accel_keys[VIEW_METER], &key, &modifier))
7848 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_METER, key, modifier, TRUE);
7849 if (!disable_fullscreen) {
7850 if (get_key_and_modifier(accel_keys[VIEW_FULLSCREEN], &key, &modifier))
7851 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_FULLSCREEN, key, modifier, TRUE);
7852 }
7853 if (get_key_and_modifier(accel_keys[VIEW_ASPECT], &key, &modifier))
7854 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_ASPECT, key, modifier, TRUE);
7855 if (get_key_and_modifier(accel_keys[VIEW_SUBTITLES], &key, &modifier))
7856 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_SUBTITLES, key, modifier, TRUE);
7857 if (get_key_and_modifier(accel_keys[VIEW_DECREASE_SIZE], &key, &modifier))
7858 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_DECREASE_SIZE, key, modifier, TRUE);
7859 if (get_key_and_modifier(accel_keys[VIEW_INCREASE_SIZE], &key, &modifier))
7860 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_INCREASE_SIZE, key, modifier, TRUE);
7861 if (get_key_and_modifier(accel_keys[VIEW_ANGLE], &key, &modifier))
7862 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_ANGLE, key, modifier, TRUE);
7863 if (get_key_and_modifier(accel_keys[VIEW_CONTROLS], &key, &modifier))
7864 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_CONTROLS, key, modifier, TRUE);
7865
7866 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_NORMAL, GDK_1, GDK_CONTROL_MASK, TRUE);
7867 gtk_accel_map_change_entry(ACCEL_PATH_VIEW_DOUBLE, GDK_2, GDK_CONTROL_MASK, TRUE);
7868 }
7869
create_window(gint windowid)7870 GtkWidget *create_window(gint windowid)
7871 {
7872 GtkIconTheme *icon_theme;
7873 GtkTargetEntry target_entry[3];
7874 gint i = 0;
7875 #ifdef GTK2_12_ENABLED
7876 GtkRecentFilter *recent_filter;
7877 GtkAdjustment *adj;
7878 #endif
7879 #ifdef GTK3_ENABLED
7880 const char *icon_start, *icon_seek_forward, *icon_seek_backward, *icon_skip_forward, *icon_skip_backward;
7881
7882 if (gtk_widget_get_default_direction() == GTK_TEXT_DIR_RTL) {
7883 icon_start = "media-playback-start-rtl-symbolic";
7884 icon_seek_forward = "media-seek-forward-rtl-symbolic";
7885 icon_seek_backward = "media-seek-backward-rtl-symbolic";
7886 icon_skip_forward = "media-skip-forward-rtl-symbolic";
7887 icon_skip_backward = "media-skip-backward-rtl-symbolic";
7888 } else {
7889 icon_start = "media-playback-start-symbolic";
7890 icon_seek_forward = "media-seek-forward-symbolic";
7891 icon_seek_backward = "media-seek-backward-symbolic";
7892 icon_skip_forward = "media-skip-forward-symbolic";
7893 icon_skip_backward = "media-skip-backward-symbolic";
7894 }
7895 #endif
7896 in_button = FALSE;
7897 last_movement_time = -1;
7898 fs_window = NULL;
7899 fs_controls_lock = g_mutex_new();
7900 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
7901 gtk_window_set_title(GTK_WINDOW(window), _("GNOME MPlayer"));
7902 if (windowid > 0 && embedding_disabled == FALSE) {
7903 gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
7904 #ifdef GTK3_ENABLED
7905 gtk_window_set_has_resize_grip(GTK_WINDOW(window), FALSE);
7906 #endif
7907 #ifdef GTK2_20_ENABLED
7908 gtk_widget_set_can_focus(window, TRUE);
7909 #else
7910 GTK_WIDGET_SET_FLAGS(window, GTK_CAN_FOCUS);
7911 #endif
7912 }
7913 gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
7914 gtk_widget_add_events(window, GDK_BUTTON_PRESS_MASK);
7915 gtk_widget_add_events(window, GDK_BUTTON_RELEASE_MASK);
7916 gtk_widget_add_events(window, GDK_KEY_PRESS_MASK);
7917 gtk_widget_add_events(window, GDK_KEY_RELEASE_MASK);
7918 gtk_widget_add_events(window, GDK_ENTER_NOTIFY_MASK);
7919 gtk_widget_add_events(window, GDK_LEAVE_NOTIFY_MASK);
7920 gtk_widget_add_events(window, GDK_KEY_PRESS_MASK);
7921 gtk_widget_add_events(window, GDK_VISIBILITY_NOTIFY_MASK);
7922 gtk_widget_add_events(window, GDK_STRUCTURE_MASK);
7923 gtk_widget_add_events(window, GDK_POINTER_MOTION_MASK);
7924 delete_signal_id = g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_callback), NULL);
7925 g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy_callback), NULL);
7926 g_signal_connect(G_OBJECT(window), "motion_notify_event", G_CALLBACK(motion_notify_callback), NULL);
7927 g_signal_connect(G_OBJECT(window), "window_state_event", G_CALLBACK(window_state_callback), NULL);
7928 g_signal_connect(G_OBJECT(window), "configure_event", G_CALLBACK(configure_callback), NULL);
7929 accel_group = gtk_accel_group_new();
7930 // right click menu
7931 popup_menu = GTK_MENU(gtk_menu_new());
7932 menubar = gtk_menu_bar_new();
7933 menuitem_play = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PLAY, NULL));
7934 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_play));
7935 gtk_widget_show(GTK_WIDGET(menuitem_play));
7936 menuitem_stop = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_STOP, NULL));
7937 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_stop));
7938 gtk_widget_show(GTK_WIDGET(menuitem_stop));
7939 menuitem_prev = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_PREVIOUS, NULL));
7940 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_prev));
7941 menuitem_next = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_MEDIA_NEXT, NULL));
7942 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_next));
7943 menuitem_sep1 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
7944 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep1));
7945 gtk_widget_show(GTK_WIDGET(menuitem_sep1));
7946 menuitem_open = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, accel_group));
7947 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_open));
7948 gtk_widget_show(GTK_WIDGET(menuitem_open));
7949 menuitem_sep3 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
7950 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep3));
7951 gtk_widget_show(GTK_WIDGET(menuitem_sep3));
7952 menuitem_showcontrols = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("S_how Controls")));
7953 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_showcontrols));
7954 gtk_widget_show(GTK_WIDGET(menuitem_showcontrols));
7955 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols), TRUE);
7956 menuitem_fullscreen = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_Full Screen")));
7957 if (!disable_fullscreen) {
7958 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_fullscreen));
7959 gtk_widget_show(GTK_WIDGET(menuitem_fullscreen));
7960 }
7961 menuitem_copyurl = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_Copy Location")));
7962 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_copyurl));
7963 gtk_widget_show(GTK_WIDGET(menuitem_copyurl));
7964 menuitem_sep2 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
7965 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep2));
7966 if (control_id != 0)
7967 gtk_widget_show(GTK_WIDGET(menuitem_sep2));
7968 menuitem_config = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL));
7969 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_config));
7970 if (control_id != 0)
7971 gtk_widget_show(GTK_WIDGET(menuitem_config));
7972 menuitem_sep4 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
7973 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep4));
7974 menuitem_save = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE_AS, accel_group));
7975 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_save));
7976 // we only want to show the save option when under control of gecko-mediaplayer
7977 if (control_id != 0) {
7978 gtk_widget_show(GTK_WIDGET(menuitem_sep4));
7979 gtk_widget_show(GTK_WIDGET(menuitem_save));
7980 if (embed_window != 0)
7981 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_save), FALSE);
7982 }
7983
7984 menuitem_sep3 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
7985 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_sep3));
7986 if (control_id != 0)
7987 gtk_widget_show(GTK_WIDGET(menuitem_sep3));
7988 menuitem_quit = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group));
7989 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), GTK_WIDGET(menuitem_quit));
7990 if (control_id != 0)
7991 gtk_widget_show(GTK_WIDGET(menuitem_quit));
7992
7993 g_signal_connect(G_OBJECT(menuitem_open), "activate", G_CALLBACK(menuitem_open_callback), NULL);
7994 g_signal_connect(G_OBJECT(menuitem_play), "activate", G_CALLBACK(menuitem_pause_callback), NULL);
7995 g_signal_connect(G_OBJECT(menuitem_stop), "activate", G_CALLBACK(menuitem_stop_callback), NULL);
7996 g_signal_connect(G_OBJECT(menuitem_prev), "activate", G_CALLBACK(menuitem_prev_callback), NULL);
7997 g_signal_connect(G_OBJECT(menuitem_next), "activate", G_CALLBACK(menuitem_next_callback), NULL);
7998 g_signal_connect(G_OBJECT(menuitem_showcontrols), "toggled", G_CALLBACK(menuitem_showcontrols_callback), NULL);
7999 g_signal_connect(G_OBJECT(menuitem_fullscreen), "toggled", G_CALLBACK(menuitem_fs_callback), NULL);
8000 g_signal_connect(G_OBJECT(menuitem_copyurl), "activate", G_CALLBACK(menuitem_copyurl_callback), NULL);
8001 g_signal_connect(G_OBJECT(menuitem_config), "activate", G_CALLBACK(menuitem_config_callback), NULL);
8002 g_signal_connect(G_OBJECT(menuitem_save), "activate", G_CALLBACK(menuitem_save_callback), NULL);
8003 g_signal_connect(G_OBJECT(menuitem_quit), "activate", G_CALLBACK(menuitem_quit_callback), NULL);
8004 g_signal_connect_swapped(G_OBJECT(window), "button_release_event", G_CALLBACK(popup_handler), G_OBJECT(popup_menu));
8005 //g_signal_connect_swapped(G_OBJECT(window),
8006 // "scroll_event", G_CALLBACK(drawing_area_scroll_event_callback), G_OBJECT(drawing_area));
8007 g_signal_connect_swapped(G_OBJECT(window), "enter_notify_event", G_CALLBACK(notification_handler), NULL);
8008 g_signal_connect_swapped(G_OBJECT(window), "leave_notify_event", G_CALLBACK(notification_handler), NULL);
8009 // File Menu
8010 menuitem_file = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_File")));
8011 menu_file = GTK_MENU(gtk_menu_new());
8012 gtk_menu_set_accel_group(GTK_MENU(menu_file), accel_group);
8013 gtk_widget_show(GTK_WIDGET(menuitem_file));
8014 gtk_menu_shell_append(GTK_MENU_SHELL(menubar), GTK_WIDGET(menuitem_file));
8015 gtk_menu_item_set_submenu(menuitem_file, GTK_WIDGET(menu_file));
8016 menuitem_file_open = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, accel_group));
8017 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_open));
8018 menuitem_file_open_folder = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _Folder")));
8019 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM
8020 (menuitem_file_open_folder),
8021 gtk_image_new_from_icon_name("folder", GTK_ICON_SIZE_MENU));
8022 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_open_folder));
8023 menuitem_file_open_location = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _Location")));
8024 gtk_menu_item_set_accel_path(menuitem_file_open_location, ACCEL_PATH_OPEN_LOCATION);
8025 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM
8026 (menuitem_file_open_location),
8027 gtk_image_new_from_icon_name("network-server", GTK_ICON_SIZE_MENU));
8028 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_open_location));
8029 menuitem_file_disc = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("_Disc")));
8030 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM
8031 (menuitem_file_disc),
8032 gtk_image_new_from_icon_name("media-optical", GTK_ICON_SIZE_MENU));
8033 menu_file_disc = GTK_MENU(gtk_menu_new());
8034 gtk_widget_show(GTK_WIDGET(menuitem_file_disc));
8035 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_disc));
8036 gtk_menu_item_set_submenu(menuitem_file_disc, GTK_WIDGET(menu_file_disc));
8037 menuitem_file_open_acd = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _Audio CD")));
8038 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_acd));
8039 menuitem_file_open_sep1 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8040 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_sep1));
8041 //menuitem_file_open_dvd = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _DVD")));
8042 //gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_dvd));
8043 menuitem_file_open_dvdnav = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open DVD with _Menus")));
8044 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_dvdnav));
8045 //menuitem_file_open_dvd_folder = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open DVD from _Folder")));
8046 //gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_dvd_folder));
8047 menuitem_file_open_dvdnav_folder =
8048 GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open DVD from Folder with M_enus")));
8049 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_dvdnav_folder));
8050 //menuitem_file_open_dvd_iso = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open DVD from _ISO")));
8051 //gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_dvd_iso));
8052 menuitem_file_open_dvdnav_iso =
8053 GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open DVD from ISO with Me_nus")));
8054 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_dvdnav_iso));
8055 menuitem_file_open_sep2 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8056 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_sep2));
8057 menuitem_file_open_vcd = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _VCD")));
8058 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_disc), GTK_WIDGET(menuitem_file_open_vcd));
8059 menuitem_file_tv = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_TV")));
8060 menu_file_tv = GTK_MENU(gtk_menu_new());
8061 gtk_widget_show(GTK_WIDGET(menuitem_file_tv));
8062 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_tv));
8063 gtk_menu_item_set_submenu(menuitem_file_tv, GTK_WIDGET(menu_file_tv));
8064 menuitem_file_open_atv = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _Analog TV")));
8065 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_tv), GTK_WIDGET(menuitem_file_open_atv));
8066 menuitem_file_open_dtv = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _Digital TV")));
8067 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file_tv), GTK_WIDGET(menuitem_file_open_dtv));
8068 #ifdef HAVE_GPOD
8069 menuitem_file_open_ipod = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Open _iPod™")));
8070 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM
8071 (menuitem_file_open_ipod),
8072 gtk_image_new_from_icon_name("multimedia-player", GTK_ICON_SIZE_MENU));
8073 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_open_ipod));
8074 #endif
8075 #ifdef GTK2_12_ENABLED
8076 #ifdef GIO_ENABLED
8077 recent_manager = gtk_recent_manager_get_default();
8078 menuitem_file_recent = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("Open _Recent")));
8079 // g_signal_connect(recent_manager, "changed", G_CALLBACK(recent_manager_changed_callback), NULL);
8080 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_recent));
8081 menuitem_file_recent_items = gtk_recent_chooser_menu_new();
8082 recent_filter = gtk_recent_filter_new();
8083 gtk_recent_filter_add_application(recent_filter, "gnome-mplayer");
8084 gtk_recent_chooser_add_filter(GTK_RECENT_CHOOSER(menuitem_file_recent_items), recent_filter);
8085 gtk_recent_chooser_set_show_tips(GTK_RECENT_CHOOSER(menuitem_file_recent_items), TRUE);
8086 gtk_recent_chooser_set_sort_type(GTK_RECENT_CHOOSER(menuitem_file_recent_items), GTK_RECENT_SORT_MRU);
8087 gtk_menu_item_set_submenu(menuitem_file_recent, menuitem_file_recent_items);
8088 gtk_recent_chooser_set_local_only(GTK_RECENT_CHOOSER(menuitem_file_recent_items), FALSE);
8089 #endif
8090 #endif
8091 menuitem_file_sep2 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8092 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_sep2));
8093 menuitem_file_quit = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group));
8094 gtk_menu_shell_append(GTK_MENU_SHELL(menu_file), GTK_WIDGET(menuitem_file_quit));
8095 g_signal_connect(G_OBJECT(menuitem_file_open), "activate", G_CALLBACK(menuitem_open_callback), NULL);
8096 g_signal_connect(G_OBJECT(menuitem_file_open_folder), "activate",
8097 G_CALLBACK(add_folder_to_playlist), menuitem_file_open_folder);
8098 g_signal_connect(G_OBJECT(menuitem_file_open_location), "activate",
8099 G_CALLBACK(menuitem_open_location_callback), NULL);
8100 //g_signal_connect(G_OBJECT(menuitem_file_open_dvd), "activate", G_CALLBACK(menuitem_open_dvd_callback), NULL);
8101 g_signal_connect(G_OBJECT(menuitem_file_open_dvdnav), "activate", G_CALLBACK(menuitem_open_dvdnav_callback), NULL);
8102 //g_signal_connect(G_OBJECT(menuitem_file_open_dvd_folder), "activate",
8103 // G_CALLBACK(menuitem_open_dvd_folder_callback), NULL);
8104 g_signal_connect(G_OBJECT(menuitem_file_open_dvdnav_folder),
8105 "activate", G_CALLBACK(menuitem_open_dvdnav_folder_callback), NULL);
8106 //g_signal_connect(G_OBJECT(menuitem_file_open_dvd_iso), "activate",
8107 // G_CALLBACK(menuitem_open_dvd_iso_callback), NULL);
8108 g_signal_connect(G_OBJECT(menuitem_file_open_dvdnav_iso),
8109 "activate", G_CALLBACK(menuitem_open_dvdnav_iso_callback), NULL);
8110 g_signal_connect(G_OBJECT(menuitem_file_open_acd), "activate", G_CALLBACK(menuitem_open_acd_callback), NULL);
8111 g_signal_connect(G_OBJECT(menuitem_file_open_vcd), "activate", G_CALLBACK(menuitem_open_vcd_callback), NULL);
8112 g_signal_connect(G_OBJECT(menuitem_file_open_atv), "activate", G_CALLBACK(menuitem_open_atv_callback), NULL);
8113 g_signal_connect(G_OBJECT(menuitem_file_open_dtv), "activate", G_CALLBACK(menuitem_open_dtv_callback), NULL);
8114 #ifdef HAVE_GPOD
8115 g_signal_connect(G_OBJECT(menuitem_file_open_ipod), "activate", G_CALLBACK(menuitem_open_ipod_callback), NULL);
8116 #endif
8117 #ifdef GTK2_12_ENABLED
8118 #ifdef GIO_ENABLED
8119 g_signal_connect(G_OBJECT(menuitem_file_recent_items),
8120 "item-activated", G_CALLBACK(menuitem_open_recent_callback), NULL);
8121 #endif
8122 #endif
8123 g_signal_connect(G_OBJECT(menuitem_file_quit), "activate", G_CALLBACK(menuitem_quit_callback), NULL);
8124 // Edit Menu
8125 menuitem_edit = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_Edit")));
8126 menu_edit = GTK_MENU(gtk_menu_new());
8127 gtk_menu_set_accel_group(GTK_MENU(menu_edit), accel_group);
8128 gtk_widget_show(GTK_WIDGET(menuitem_edit));
8129 gtk_menu_shell_append(GTK_MENU_SHELL(menubar), GTK_WIDGET(menuitem_edit));
8130 gtk_menu_item_set_submenu(menuitem_edit, GTK_WIDGET(menu_edit));
8131 menuitem_edit_random = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_Shuffle Playlist")));
8132 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_edit_random), random_order);
8133 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_random));
8134 menuitem_edit_loop = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_Loop Playlist")));
8135 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_edit_loop), loop);
8136 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_loop));
8137 menuitem_edit_play_single =
8138 GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("P_lay Single Track from Playlist")));
8139 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_play_single));
8140 menuitem_view_sep0 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8141 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_view_sep0));
8142 menuitem_edit_switch_audio = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("S_witch Audio Track")));
8143 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_switch_audio));
8144 menuitem_edit_set_audiofile = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("Set Audi_o")));
8145 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_set_audiofile));
8146 menuitem_edit_select_audio_lang = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("Select _Audio Language")));
8147 gtk_widget_show(GTK_WIDGET(menuitem_edit_select_audio_lang));
8148 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_select_audio_lang));
8149 menuitem_edit_set_subtitle = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("Set S_ubtitle")));
8150 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_set_subtitle));
8151 menuitem_edit_select_sub_lang = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("S_elect Subtitle Language")));
8152 gtk_widget_show(GTK_WIDGET(menuitem_edit_select_sub_lang));
8153 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_select_sub_lang));
8154 menuitem_view_sep0 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8155 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_view_sep0));
8156 menuitem_edit_take_screenshot = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_Take Screenshot")));
8157 gtk_menu_item_set_accel_path(menuitem_edit_take_screenshot, ACCEL_PATH_EDIT_SCREENSHOT);
8158 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_take_screenshot));
8159 #ifdef GTK2_12_ENABLED
8160 gtk_widget_set_tooltip_text(GTK_WIDGET
8161 (menuitem_edit_take_screenshot),
8162 _("Files named ’shotNNNN.png’ will be saved in the working directory"));
8163 #else
8164 tooltip = gtk_tooltips_new();
8165 gtk_tooltips_set_tip(tooltip,
8166 GTK_WIDGET(menuitem_edit_take_screenshot),
8167 _("Files named ’shotNNNN.png’ will be saved in the working directory"), NULL);
8168 #endif
8169 menuitem_edit_sep1 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8170 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_sep1));
8171 menuitem_edit_config = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL));
8172 gtk_menu_item_set_accel_path(menuitem_edit_config, ACCEL_PATH_EDIT_PREFERENCES);
8173 gtk_menu_shell_append(GTK_MENU_SHELL(menu_edit), GTK_WIDGET(menuitem_edit_config));
8174 g_signal_connect(G_OBJECT(menuitem_edit_random), "activate", G_CALLBACK(menuitem_edit_random_callback), NULL);
8175 g_signal_connect(G_OBJECT(menuitem_edit_loop), "activate", G_CALLBACK(menuitem_edit_loop_callback), NULL);
8176 g_signal_connect(G_OBJECT(menuitem_edit_set_audiofile), "activate",
8177 G_CALLBACK(menuitem_edit_set_audiofile_callback), NULL);
8178 g_signal_connect(G_OBJECT(menuitem_edit_switch_audio), "activate",
8179 G_CALLBACK(menuitem_edit_switch_audio_callback), NULL);
8180 g_signal_connect(G_OBJECT(menuitem_edit_set_subtitle), "activate",
8181 G_CALLBACK(menuitem_edit_set_subtitle_callback), NULL);
8182 g_signal_connect(G_OBJECT(menuitem_edit_take_screenshot),
8183 "activate", G_CALLBACK(menuitem_edit_take_screenshot_callback), NULL);
8184 g_signal_connect(G_OBJECT(menuitem_edit_config), "activate", G_CALLBACK(menuitem_config_callback), NULL);
8185
8186 // View Menu
8187 menuitem_view = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_View")));
8188 menu_view = GTK_MENU(gtk_menu_new());
8189 gtk_menu_set_accel_group(GTK_MENU(menu_view), accel_group);
8190 gtk_widget_show(GTK_WIDGET(menuitem_view));
8191 gtk_menu_shell_append(GTK_MENU_SHELL(menubar), GTK_WIDGET(menuitem_view));
8192 gtk_menu_item_set_submenu(menuitem_view, GTK_WIDGET(menu_view));
8193 menuitem_view_playlist = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_Playlist")));
8194 gtk_menu_item_set_accel_path(menuitem_view_playlist, ACCEL_PATH_VIEW_PLAYLIST);
8195 // gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_playlist), playlist_visible);
8196 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_playlist));
8197 menuitem_view_info = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("Media _Info")));
8198 gtk_menu_item_set_accel_path(menuitem_view_info, ACCEL_PATH_VIEW_INFO);
8199 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_info));
8200 menuitem_view_details = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("D_etails")));
8201 gtk_menu_item_set_accel_path(menuitem_view_details, ACCEL_PATH_VIEW_DETAILS);
8202 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_details));
8203 menuitem_view_meter = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("Audio _Meter")));
8204 gtk_menu_item_set_accel_path(menuitem_view_meter, ACCEL_PATH_VIEW_METER);
8205 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_meter));
8206 menuitem_view_sep0 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8207 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_sep0));
8208 menuitem_view_fullscreen = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_Full Screen")));
8209 gtk_menu_item_set_accel_path(menuitem_view_fullscreen, ACCEL_PATH_VIEW_FULLSCREEN);
8210 menuitem_view_sep1 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8211 if (!disable_fullscreen) {
8212 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_fullscreen));
8213 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_sep1));
8214 }
8215 menuitem_view_onetoone = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("_Normal (1:1)")));
8216 gtk_menu_item_set_accel_path(menuitem_view_onetoone, ACCEL_PATH_VIEW_NORMAL);
8217 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_onetoone));
8218 menuitem_view_twotoone = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("_Double Size (2:1)")));
8219 gtk_menu_item_set_accel_path(menuitem_view_twotoone, ACCEL_PATH_VIEW_DOUBLE);
8220 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_twotoone));
8221 menuitem_view_onetotwo = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("_Half Size (1:2)")));
8222 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_onetotwo));
8223 menuitem_view_onetoonepointfive = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Half _Larger (1.5:1)")));
8224 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_onetoonepointfive));
8225 menuitem_view_aspect = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_Aspect")));
8226 gtk_menu_item_set_accel_path(menuitem_view_aspect, ACCEL_PATH_VIEW_ASPECT);
8227 menu_view_aspect = GTK_MENU(gtk_menu_new());
8228 gtk_widget_show(GTK_WIDGET(menuitem_view_aspect));
8229 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_aspect));
8230 gtk_menu_item_set_submenu(menuitem_view_aspect, GTK_WIDGET(menu_view_aspect));
8231 menuitem_view_aspect_default = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("D_efault Aspect")));
8232 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view_aspect), GTK_WIDGET(menuitem_view_aspect_default));
8233 menuitem_view_aspect_four_three = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_4:3 Aspect")));
8234 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view_aspect), GTK_WIDGET(menuitem_view_aspect_four_three));
8235 menuitem_view_aspect_sixteen_nine = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_16:9 Aspect")));
8236 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view_aspect), GTK_WIDGET(menuitem_view_aspect_sixteen_nine));
8237 menuitem_view_aspect_sixteen_ten = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("1_6:10 Aspect")));
8238 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view_aspect), GTK_WIDGET(menuitem_view_aspect_sixteen_ten));
8239 menuitem_view_aspect_anamorphic =
8240 GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_2.39:1 Aspect (Anamorphic)")));
8241 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view_aspect), GTK_WIDGET(menuitem_view_aspect_anamorphic));
8242 menuitem_view_aspect_follow_window = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_Follow Window")));
8243 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view_aspect), GTK_WIDGET(menuitem_view_aspect_follow_window));
8244 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_aspect_default), TRUE);
8245 menuitem_view_sep2 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8246 menuitem_view_sep5 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8247 menuitem_view_subtitles = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("Show _Subtitles")));
8248 gtk_menu_item_set_accel_path(menuitem_view_subtitles, ACCEL_PATH_VIEW_SUBTITLES);
8249 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_subtitles), showsubtitles);
8250 menuitem_view_smaller_subtitle = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Decrease Subtitle Size")));
8251 gtk_menu_item_set_accel_path(menuitem_view_smaller_subtitle, ACCEL_PATH_VIEW_DECREASE_SIZE);
8252 menuitem_view_larger_subtitle = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Increase Subtitle Size")));
8253 gtk_menu_item_set_accel_path(menuitem_view_larger_subtitle, ACCEL_PATH_VIEW_INCREASE_SIZE);
8254 menuitem_view_decrease_subtitle_delay =
8255 GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Decrease Subtitle Delay")));
8256 menuitem_view_increase_subtitle_delay =
8257 GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Increase Subtitle Delay")));
8258 menuitem_view_angle = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("Switch An_gle")));
8259 gtk_menu_item_set_accel_path(menuitem_view_angle, ACCEL_PATH_VIEW_ANGLE);
8260 menuitem_view_controls = GTK_MENU_ITEM(gtk_check_menu_item_new_with_mnemonic(_("_Controls")));
8261 gtk_menu_item_set_accel_path(menuitem_view_controls, ACCEL_PATH_VIEW_CONTROLS);
8262 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_controls), TRUE);
8263 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_sep2));
8264 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_subtitles));
8265 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_smaller_subtitle));
8266 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_larger_subtitle));
8267 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_decrease_subtitle_delay));
8268 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_increase_subtitle_delay));
8269 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_sep5));
8270 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_angle));
8271 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_controls));
8272 menuitem_view_sep3 = GTK_MENU_ITEM(gtk_separator_menu_item_new());
8273 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_sep3));
8274 menuitem_view_advanced = GTK_MENU_ITEM(gtk_image_menu_item_new_with_mnemonic(_("_Video Picture Adjustments")));
8275 gtk_menu_shell_append(GTK_MENU_SHELL(menu_view), GTK_WIDGET(menuitem_view_advanced));
8276 g_signal_connect(G_OBJECT(menuitem_view_playlist), "toggled", G_CALLBACK(menuitem_view_playlist_callback), NULL);
8277 g_signal_connect(G_OBJECT(menuitem_view_info), "activate", G_CALLBACK(menuitem_view_info_callback), NULL);
8278 g_signal_connect(G_OBJECT(menuitem_view_details), "activate", G_CALLBACK(menuitem_details_callback), NULL);
8279 g_signal_connect(G_OBJECT(menuitem_view_meter), "activate", G_CALLBACK(menuitem_meter_callback), NULL);
8280 g_signal_connect(G_OBJECT(menuitem_view_fullscreen), "toggled", G_CALLBACK(menuitem_fs_callback), NULL);
8281 g_signal_connect(G_OBJECT(menuitem_view_onetoone), "activate",
8282 G_CALLBACK(menuitem_view_onetoone_callback), idledata);
8283 g_signal_connect(G_OBJECT(menuitem_view_twotoone), "activate",
8284 G_CALLBACK(menuitem_view_twotoone_callback), idledata);
8285 g_signal_connect(G_OBJECT(menuitem_view_onetotwo), "activate",
8286 G_CALLBACK(menuitem_view_onetotwo_callback), idledata);
8287 g_signal_connect(G_OBJECT(menuitem_view_onetoonepointfive), "activate",
8288 G_CALLBACK(menuitem_view_onetoonepointfive_callback), idledata);
8289 g_signal_connect(G_OBJECT(menuitem_view_aspect_default),
8290 "activate", G_CALLBACK(menuitem_view_aspect_callback), NULL);
8291 g_signal_connect(G_OBJECT(menuitem_view_aspect_four_three),
8292 "activate", G_CALLBACK(menuitem_view_aspect_callback), NULL);
8293 g_signal_connect(G_OBJECT(menuitem_view_aspect_sixteen_nine),
8294 "activate", G_CALLBACK(menuitem_view_aspect_callback), NULL);
8295 g_signal_connect(G_OBJECT(menuitem_view_aspect_sixteen_ten),
8296 "activate", G_CALLBACK(menuitem_view_aspect_callback), NULL);
8297 g_signal_connect(G_OBJECT(menuitem_view_aspect_anamorphic),
8298 "activate", G_CALLBACK(menuitem_view_aspect_callback), NULL);
8299 g_signal_connect(G_OBJECT(menuitem_view_aspect_follow_window),
8300 "activate", G_CALLBACK(menuitem_view_aspect_callback), NULL);
8301 g_signal_connect(G_OBJECT(menuitem_view_subtitles), "toggled", G_CALLBACK(menuitem_view_subtitles_callback), NULL);
8302 g_signal_connect(G_OBJECT(menuitem_view_smaller_subtitle),
8303 "activate", G_CALLBACK(menuitem_view_smaller_subtitle_callback), NULL);
8304 g_signal_connect(G_OBJECT(menuitem_view_larger_subtitle),
8305 "activate", G_CALLBACK(menuitem_view_larger_subtitle_callback), NULL);
8306 g_signal_connect(G_OBJECT(menuitem_view_decrease_subtitle_delay),
8307 "activate", G_CALLBACK(menuitem_view_decrease_subtitle_delay_callback), NULL);
8308 g_signal_connect(G_OBJECT(menuitem_view_increase_subtitle_delay),
8309 "activate", G_CALLBACK(menuitem_view_increase_subtitle_delay_callback), NULL);
8310 g_signal_connect(G_OBJECT(menuitem_view_angle), "activate", G_CALLBACK(menuitem_view_angle_callback), NULL);
8311 g_signal_connect(G_OBJECT(menuitem_view_controls), "toggled", G_CALLBACK(menuitem_showcontrols_callback), NULL);
8312 g_signal_connect(G_OBJECT(menuitem_view_advanced), "activate", G_CALLBACK(menuitem_advanced_callback), idledata);
8313 // Help Menu
8314 menuitem_help = GTK_MENU_ITEM(gtk_menu_item_new_with_mnemonic(_("_Help")));
8315 menu_help = GTK_MENU(gtk_menu_new());
8316 gtk_widget_show(GTK_WIDGET(menuitem_help));
8317 gtk_menu_shell_append(GTK_MENU_SHELL(menubar), GTK_WIDGET(menuitem_help));
8318 gtk_menu_item_set_submenu(menuitem_help, GTK_WIDGET(menu_help));
8319 menuitem_help_about = GTK_MENU_ITEM(gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL));
8320 gtk_menu_shell_append(GTK_MENU_SHELL(menu_help), GTK_WIDGET(menuitem_help_about));
8321 g_signal_connect(G_OBJECT(menuitem_help_about), "activate", G_CALLBACK(menuitem_about_callback), NULL);
8322 gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
8323 setup_accelerators();
8324 g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(window_key_callback), NULL);
8325 // Give the window the property to accept DnD
8326 target_entry[i].target = DRAG_NAME_0;
8327 target_entry[i].flags = 0;
8328 target_entry[i++].info = DRAG_INFO_0;
8329 target_entry[i].target = DRAG_NAME_1;
8330 target_entry[i].flags = 0;
8331 target_entry[i++].info = DRAG_INFO_1;
8332 target_entry[i].target = DRAG_NAME_2;
8333 target_entry[i].flags = 0;
8334 target_entry[i++].info = DRAG_INFO_2;
8335 gtk_drag_dest_set(window,
8336 GTK_DEST_DEFAULT_MOTION |
8337 GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_DROP, target_entry, i, GDK_ACTION_LINK);
8338 gtk_drag_dest_add_uri_targets(window);
8339 //Connect the signal for DnD
8340 g_signal_connect(G_OBJECT(window), "drag_data_received", G_CALLBACK(drop_callback), NULL);
8341 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
8342 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
8343 gtk_box_set_homogeneous(GTK_BOX(vbox), FALSE);
8344 #else
8345 vbox = gtk_vbox_new(FALSE, 0);
8346 #endif
8347 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
8348 hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
8349 gtk_box_set_homogeneous(GTK_BOX(hbox), FALSE);
8350 #else
8351 hbox = gtk_hbox_new(FALSE, 0);
8352 #endif
8353 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
8354 controls_box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
8355 gtk_box_set_homogeneous(GTK_BOX(controls_box), FALSE);
8356 #else
8357 controls_box = gtk_vbox_new(FALSE, 0);
8358 #endif
8359 media = gmtk_media_player_new();
8360 g_signal_connect_swapped(G_OBJECT(media), "media_state_changed",
8361 G_CALLBACK(player_media_state_changed_callback), NULL);
8362 g_signal_connect_swapped(G_OBJECT(media), "button_press_event", G_CALLBACK(popup_handler), G_OBJECT(popup_menu));
8363 g_signal_connect(G_OBJECT(media), "audio-tracks-changed",
8364 G_CALLBACK(player_audio_track_callback), menuitem_edit_select_audio_lang);
8365 g_signal_connect(G_OBJECT(media), "subtitles-changed",
8366 G_CALLBACK(player_subtitle_callback), menuitem_edit_select_sub_lang);
8367 g_signal_connect(G_OBJECT(media), "size_allocate", G_CALLBACK(player_size_allocate_callback), NULL);
8368 g_signal_connect(G_OBJECT(media), "scroll_event", G_CALLBACK(media_scroll_event_callback), NULL);
8369 g_signal_connect(G_OBJECT(media), "error-message", G_CALLBACK(player_error_message_callback), NULL);
8370 cover_art = gtk_image_new();
8371 media_label = gtk_label_new("");
8372 gtk_widget_set_size_request(media_label, 300, 100);
8373 gtk_label_set_ellipsize(GTK_LABEL(media_label), PANGO_ELLIPSIZE_END);
8374 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
8375 media_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 10);
8376 gtk_box_set_homogeneous(GTK_BOX(media_hbox), FALSE);
8377 #else
8378 media_hbox = gtk_hbox_new(FALSE, 10);
8379 #endif
8380 g_signal_connect(media_hbox, "show", G_CALLBACK(view_option_show_callback), NULL);
8381 g_signal_connect(media_hbox, "size_allocate", G_CALLBACK(view_option_size_allocate_callback), NULL);
8382 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
8383 details_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10);
8384 gtk_box_set_homogeneous(GTK_BOX(details_vbox), FALSE);
8385 #else
8386 details_vbox = gtk_vbox_new(FALSE, 10);
8387 #endif
8388 details_table = gtk_table_new(20, 2, FALSE);
8389 g_signal_connect(details_vbox, "show", G_CALLBACK(view_option_show_callback), NULL);
8390 g_signal_connect(details_vbox, "size_allocate", G_CALLBACK(view_option_size_allocate_callback), NULL);
8391 create_details_table();
8392 gtk_container_add(GTK_CONTAINER(details_vbox), details_table);
8393 gtk_misc_set_alignment(GTK_MISC(media_label), 0, 0);
8394 audio_meter = gmtk_audio_meter_new(METER_BARS);
8395 g_signal_connect(audio_meter, "show", G_CALLBACK(view_option_show_callback), NULL);
8396 g_signal_connect(audio_meter, "size_allocate", G_CALLBACK(view_option_size_allocate_callback), NULL);
8397 gmtk_audio_meter_set_max_division_width(GMTK_AUDIO_METER(audio_meter), 10);
8398 gtk_widget_set_size_request(audio_meter, -1, 100);
8399 g_timeout_add_full(G_PRIORITY_HIGH, 40, update_audio_meter, NULL, NULL);
8400 gtk_box_pack_start(GTK_BOX(vbox), media, TRUE, TRUE, 0);
8401 gtk_box_pack_start(GTK_BOX(media_hbox), cover_art, FALSE, FALSE, 0);
8402 gtk_box_pack_start(GTK_BOX(media_hbox), media_label, FALSE, FALSE, 0);
8403 gtk_box_pack_start(GTK_BOX(vbox), media_hbox, FALSE, FALSE, 0);
8404 gtk_box_pack_start(GTK_BOX(vbox), details_vbox, FALSE, FALSE, 0);
8405 gtk_box_pack_start(GTK_BOX(vbox), audio_meter, FALSE, FALSE, 0);
8406 gtk_box_pack_start(GTK_BOX(controls_box), hbox, FALSE, FALSE, 1);
8407 if (vertical_layout) {
8408 pane = gtk_vpaned_new();
8409 } else {
8410 pane = gtk_hpaned_new();
8411 }
8412 gtk_paned_pack1(GTK_PANED(pane), vbox, FALSE, TRUE);
8413 create_playlist_widget();
8414 g_signal_connect(plvbox, "show", G_CALLBACK(view_option_show_callback), NULL);
8415 g_signal_connect(plvbox, "hide", G_CALLBACK(view_option_hide_callback), NULL);
8416 g_signal_connect(plvbox, "size_allocate", G_CALLBACK(view_option_size_allocate_callback), NULL);
8417 //if (remember_loc)
8418 // gtk_paned_set_position(GTK_PANED(pane),loc_panel_position);
8419 #if GTK_MAJOR_VERSION == 3 && GTK_MINOR_VERSION >= 2
8420 vbox_master = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
8421 gtk_box_set_homogeneous(GTK_BOX(vbox_master), FALSE);
8422 #else
8423 vbox_master = gtk_vbox_new(FALSE, 0);
8424 #endif
8425 if (windowid == 0)
8426 gtk_box_pack_start(GTK_BOX(vbox_master), menubar, FALSE, FALSE, 0);
8427 gtk_widget_show(menubar);
8428 gtk_box_pack_start(GTK_BOX(vbox_master), pane, TRUE, TRUE, 0);
8429 gtk_box_pack_start(GTK_BOX(vbox_master), controls_box, FALSE, FALSE, 0);
8430 gtk_container_add(GTK_CONTAINER(window), vbox_master);
8431 icon_theme = gtk_icon_theme_get_default();
8432 #ifdef GTK3_ENABLED
8433 if (gtk_icon_theme_has_icon(icon_theme, icon_start) &&
8434 gtk_icon_theme_has_icon(icon_theme, "media-playback-stop-symbolic") &&
8435 gtk_icon_theme_has_icon(icon_theme, "media-playback-pause-symbolic") &&
8436 gtk_icon_theme_has_icon(icon_theme, icon_seek_forward) &&
8437 gtk_icon_theme_has_icon(icon_theme, icon_seek_backward) &&
8438 gtk_icon_theme_has_icon(icon_theme, "view-sidebar-symbolic") &&
8439 gtk_icon_theme_has_icon(icon_theme, "view-fullscreen-symbolic")) {
8440 image_play = gtk_image_new_from_icon_name(icon_start, button_size);
8441 image_stop = gtk_image_new_from_icon_name("media-playback-stop-symbolic", button_size);
8442 image_pause = gtk_image_new_from_icon_name("media-playback-pause-symbolic", button_size);
8443 image_ff = gtk_image_new_from_icon_name(icon_seek_forward, button_size);
8444 image_rew = gtk_image_new_from_icon_name(icon_seek_backward, button_size);
8445 image_prev = gtk_image_new_from_icon_name(icon_skip_backward, button_size);
8446 image_next = gtk_image_new_from_icon_name(icon_skip_forward, button_size);
8447 image_menu = gtk_image_new_from_icon_name("view-sidebar-symbolic", button_size);
8448 image_fs = gtk_image_new_from_icon_name("view-fullscreen-symbolic", button_size);
8449 } else {
8450 image_play = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, button_size);
8451 image_stop = gtk_image_new_from_stock(GTK_STOCK_MEDIA_STOP, button_size);
8452 image_pause = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE, button_size);
8453 image_ff = gtk_image_new_from_stock(GTK_STOCK_MEDIA_FORWARD, button_size);
8454 image_rew = gtk_image_new_from_stock(GTK_STOCK_MEDIA_REWIND, button_size);
8455 image_prev = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PREVIOUS, button_size);
8456 image_next = gtk_image_new_from_stock(GTK_STOCK_MEDIA_NEXT, button_size);
8457 image_menu = gtk_image_new_from_stock(GTK_STOCK_INDEX, button_size);
8458 image_fs = gtk_image_new_from_stock(GTK_STOCK_FULLSCREEN, button_size);
8459 }
8460 #else
8461 image_play = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, button_size);
8462 image_stop = gtk_image_new_from_stock(GTK_STOCK_MEDIA_STOP, button_size);
8463 image_pause = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PAUSE, button_size);
8464 image_ff = gtk_image_new_from_stock(GTK_STOCK_MEDIA_FORWARD, button_size);
8465 image_rew = gtk_image_new_from_stock(GTK_STOCK_MEDIA_REWIND, button_size);
8466 image_prev = gtk_image_new_from_stock(GTK_STOCK_MEDIA_PREVIOUS, button_size);
8467 image_next = gtk_image_new_from_stock(GTK_STOCK_MEDIA_NEXT, button_size);
8468 image_menu = gtk_image_new_from_stock(GTK_STOCK_INDEX, button_size);
8469 image_fs = gtk_image_new_from_stock(GTK_STOCK_FULLSCREEN, button_size);
8470 #endif
8471
8472 icon_list = NULL;
8473 if (gtk_icon_theme_has_icon(icon_theme, "gnome-mplayer")) {
8474 pb_icon = gtk_icon_theme_load_icon(icon_theme, "gnome-mplayer", 128, 0, NULL);
8475 if (pb_icon)
8476 icon_list = g_list_prepend(icon_list, pb_icon);
8477 pb_icon = gtk_icon_theme_load_icon(icon_theme, "gnome-mplayer", 64, 0, NULL);
8478 if (pb_icon)
8479 icon_list = g_list_prepend(icon_list, pb_icon);
8480 pb_icon = gtk_icon_theme_load_icon(icon_theme, "gnome-mplayer", 48, 0, NULL);
8481 if (pb_icon)
8482 icon_list = g_list_prepend(icon_list, pb_icon);
8483 pb_icon = gtk_icon_theme_load_icon(icon_theme, "gnome-mplayer", 24, 0, NULL);
8484 if (pb_icon)
8485 icon_list = g_list_prepend(icon_list, pb_icon);
8486 pb_icon = gtk_icon_theme_load_icon(icon_theme, "gnome-mplayer", 22, 0, NULL);
8487 if (pb_icon)
8488 icon_list = g_list_prepend(icon_list, pb_icon);
8489 pb_icon = gtk_icon_theme_load_icon(icon_theme, "gnome-mplayer", 16, 0, NULL);
8490 if (pb_icon)
8491 icon_list = g_list_prepend(icon_list, pb_icon);
8492 } else {
8493 pb_icon = gdk_pixbuf_new_from_xpm_data((const char **) gnome_mplayer_xpm);
8494 if (pb_icon)
8495 icon_list = g_list_prepend(icon_list, pb_icon);
8496 }
8497 gtk_window_set_default_icon_list(icon_list);
8498 gtk_window_set_icon_list(GTK_WINDOW(window), icon_list);
8499 #ifdef GTK2_12_ENABLED
8500 if (control_id == 0 && show_status_icon) {
8501 if (gtk_icon_theme_has_icon(icon_theme, "gnome-mplayer-panel")) {
8502 status_icon = gtk_status_icon_new_from_icon_name("gnome-mplayer-panel");
8503 } else if (gtk_icon_theme_has_icon(icon_theme, "gnome-mplayer")) {
8504 status_icon = gtk_status_icon_new_from_icon_name("gnome-mplayer");
8505 } else {
8506 status_icon = gtk_status_icon_new_from_pixbuf(pb_icon);
8507 }
8508 if (control_id != 0) {
8509 gtk_status_icon_set_visible(status_icon, FALSE);
8510 } else {
8511 gtk_status_icon_set_visible(status_icon, show_status_icon);
8512 }
8513 g_signal_connect(status_icon, "activate", G_CALLBACK(status_icon_callback), NULL);
8514 g_signal_connect(status_icon, "popup_menu", G_CALLBACK(status_icon_context_callback), NULL);
8515 }
8516 #endif
8517
8518 menu_event_box = gtk_button_new();
8519 gtk_button_set_image(GTK_BUTTON(menu_event_box), image_menu);
8520 gtk_button_set_relief(GTK_BUTTON(menu_event_box), GTK_RELIEF_NONE);
8521 #ifdef GTK2_12_ENABLED
8522 gtk_widget_set_tooltip_text(menu_event_box, _("Menu"));
8523 #else
8524 tooltip = gtk_tooltips_new();
8525 gtk_tooltips_set_tip(tooltip, menu_event_box, _("Menu"), NULL);
8526 #endif
8527 #ifdef GTK2_20_ENABLED
8528 gtk_widget_set_can_focus(menu_event_box, FALSE);
8529 #else
8530 GTK_WIDGET_UNSET_FLAGS(menu_event_box, GTK_CAN_FOCUS);
8531 #endif
8532 gtk_widget_set_events(menu_event_box, GDK_BUTTON_PRESS_MASK);
8533 g_signal_connect(G_OBJECT(menu_event_box), "button_press_event", G_CALLBACK(menu_callback), NULL);
8534 gtk_box_pack_start(GTK_BOX(hbox), menu_event_box, FALSE, FALSE, 0);
8535 gtk_widget_show(image_menu);
8536 gtk_widget_show(menu_event_box);
8537
8538 prev_event_box = gtk_button_new();
8539 gtk_button_set_image(GTK_BUTTON(prev_event_box), image_prev);
8540 gtk_button_set_relief(GTK_BUTTON(prev_event_box), GTK_RELIEF_NONE);
8541 #ifdef GTK2_12_ENABLED
8542 gtk_widget_set_tooltip_text(prev_event_box, _("Previous"));
8543 #else
8544 tooltip = gtk_tooltips_new();
8545 gtk_tooltips_set_tip(tooltip, prev_event_box, _("Previous"), NULL);
8546 #endif
8547 #ifdef GTK2_20_ENABLED
8548 gtk_widget_set_can_focus(prev_event_box, FALSE);
8549 #else
8550 GTK_WIDGET_UNSET_FLAGS(prev_event_box, GTK_CAN_FOCUS);
8551 #endif
8552 gtk_widget_set_events(prev_event_box, GDK_BUTTON_PRESS_MASK);
8553 g_signal_connect(G_OBJECT(prev_event_box), "button_press_event", G_CALLBACK(prev_callback), NULL);
8554 gtk_box_pack_start(GTK_BOX(hbox), prev_event_box, FALSE, FALSE, 0);
8555 gtk_widget_show(image_prev);
8556 gtk_widget_show(prev_event_box);
8557 gtk_widget_set_sensitive(prev_event_box, FALSE);
8558
8559 rew_event_box = gtk_button_new();
8560 gtk_button_set_image(GTK_BUTTON(rew_event_box), image_rew);
8561 gtk_button_set_relief(GTK_BUTTON(rew_event_box), GTK_RELIEF_NONE);
8562 #ifdef GTK2_12_ENABLED
8563 gtk_widget_set_tooltip_text(rew_event_box, _("Rewind"));
8564 #else
8565 tooltip = gtk_tooltips_new();
8566 gtk_tooltips_set_tip(tooltip, rew_event_box, _("Rewind"), NULL);
8567 #endif
8568 #ifdef GTK2_20_ENABLED
8569 gtk_widget_set_can_focus(rew_event_box, FALSE);
8570 #else
8571 GTK_WIDGET_UNSET_FLAGS(rew_event_box, GTK_CAN_FOCUS);
8572 #endif
8573 gtk_widget_set_events(rew_event_box, GDK_BUTTON_PRESS_MASK);
8574 g_signal_connect(G_OBJECT(rew_event_box), "button_press_event", G_CALLBACK(rew_callback), NULL);
8575 gtk_box_pack_start(GTK_BOX(hbox), rew_event_box, FALSE, FALSE, 0);
8576 gtk_widget_show(image_rew);
8577 gtk_widget_show(rew_event_box);
8578 gtk_widget_set_sensitive(rew_event_box, FALSE);
8579
8580 play_event_box = gtk_button_new();
8581 gtk_button_set_image(GTK_BUTTON(play_event_box), image_play);
8582 gtk_button_set_relief(GTK_BUTTON(play_event_box), GTK_RELIEF_NONE);
8583 #ifdef GTK2_12_ENABLED
8584 gtk_widget_set_tooltip_text(play_event_box, _("Play"));
8585 #else
8586 tooltip = gtk_tooltips_new();
8587 gtk_tooltips_set_tip(tooltip, play_event_box, _("Play"), NULL);
8588 #endif
8589 #ifdef GTK2_20_ENABLED
8590 gtk_widget_set_can_focus(play_event_box, FALSE);
8591 #else
8592 GTK_WIDGET_UNSET_FLAGS(play_event_box, GTK_CAN_FOCUS);
8593 #endif
8594 gtk_widget_set_events(play_event_box, GDK_BUTTON_PRESS_MASK);
8595 g_signal_connect(G_OBJECT(play_event_box), "button_press_event", G_CALLBACK(play_callback), NULL);
8596 gtk_box_pack_start(GTK_BOX(hbox), play_event_box, FALSE, FALSE, 0);
8597 gtk_widget_show(image_play);
8598 gtk_widget_show(play_event_box);
8599
8600 stop_event_box = gtk_button_new();
8601 gtk_button_set_image(GTK_BUTTON(stop_event_box), image_stop);
8602 gtk_button_set_relief(GTK_BUTTON(stop_event_box), GTK_RELIEF_NONE);
8603 #ifdef GTK2_12_ENABLED
8604 gtk_widget_set_tooltip_text(stop_event_box, _("Stop"));
8605 #else
8606 tooltip = gtk_tooltips_new();
8607 gtk_tooltips_set_tip(tooltip, stop_event_box, _("Stop"), NULL);
8608 #endif
8609 #ifdef GTK2_20_ENABLED
8610 gtk_widget_set_can_focus(stop_event_box, FALSE);
8611 #else
8612 GTK_WIDGET_UNSET_FLAGS(stop_event_box, GTK_CAN_FOCUS);
8613 #endif
8614 gtk_widget_set_events(stop_event_box, GDK_BUTTON_PRESS_MASK);
8615 g_signal_connect(G_OBJECT(stop_event_box), "button_press_event", G_CALLBACK(stop_callback), NULL);
8616 gtk_box_pack_start(GTK_BOX(hbox), stop_event_box, FALSE, FALSE, 0);
8617 gtk_widget_show(image_stop);
8618 gtk_widget_show(stop_event_box);
8619 gtk_widget_set_sensitive(stop_event_box, FALSE);
8620
8621 ff_event_box = gtk_button_new();
8622 gtk_button_set_image(GTK_BUTTON(ff_event_box), image_ff);
8623 gtk_button_set_relief(GTK_BUTTON(ff_event_box), GTK_RELIEF_NONE);
8624 #ifdef GTK2_12_ENABLED
8625 gtk_widget_set_tooltip_text(ff_event_box, _("Fast Forward"));
8626 #else
8627 tooltip = gtk_tooltips_new();
8628 gtk_tooltips_set_tip(tooltip, ff_event_box, _("Fast Forward"), NULL);
8629 #endif
8630 #ifdef GTK2_20_ENABLED
8631 gtk_widget_set_can_focus(ff_event_box, FALSE);
8632 #else
8633 GTK_WIDGET_UNSET_FLAGS(ff_event_box, GTK_CAN_FOCUS);
8634 #endif
8635 gtk_widget_set_events(ff_event_box, GDK_BUTTON_PRESS_MASK);
8636 g_signal_connect(G_OBJECT(ff_event_box), "button_press_event", G_CALLBACK(ff_callback), NULL);
8637 gtk_box_pack_start(GTK_BOX(hbox), ff_event_box, FALSE, FALSE, 0);
8638 gtk_widget_show(image_ff);
8639 gtk_widget_show(ff_event_box);
8640 gtk_widget_set_sensitive(ff_event_box, FALSE);
8641
8642 next_event_box = gtk_button_new();
8643 gtk_button_set_image(GTK_BUTTON(next_event_box), image_next);
8644 gtk_button_set_relief(GTK_BUTTON(next_event_box), GTK_RELIEF_NONE);
8645 #ifdef GTK2_12_ENABLED
8646 gtk_widget_set_tooltip_text(next_event_box, _("Next"));
8647 #else
8648 tooltip = gtk_tooltips_new();
8649 gtk_tooltips_set_tip(tooltip, next_event_box, _("Next"), NULL);
8650 #endif
8651 #ifdef GTK2_20_ENABLED
8652 gtk_widget_set_can_focus(next_event_box, FALSE);
8653 #else
8654 GTK_WIDGET_UNSET_FLAGS(next_event_box, GTK_CAN_FOCUS);
8655 #endif
8656 gtk_widget_set_events(next_event_box, GDK_BUTTON_PRESS_MASK);
8657 g_signal_connect(G_OBJECT(next_event_box), "button_press_event", G_CALLBACK(next_callback), NULL);
8658 gtk_box_pack_start(GTK_BOX(hbox), next_event_box, FALSE, FALSE, 0);
8659 gtk_widget_show(image_next);
8660 gtk_widget_show(next_event_box);
8661 gtk_widget_set_sensitive(next_event_box, FALSE);
8662
8663 // progress bar
8664 tracker = GMTK_MEDIA_TRACKER(gmtk_media_tracker_new());
8665 gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(tracker), TRUE, TRUE, 2);
8666 g_signal_connect(G_OBJECT(tracker), "difference-changed", G_CALLBACK(tracker_difference_callback), NULL);
8667 g_signal_connect(G_OBJECT(tracker), "value-changed", G_CALLBACK(tracker_value_changed_callback), NULL);
8668 g_signal_connect(G_OBJECT(tracker), "button_press_event", G_CALLBACK(progress_callback), NULL);
8669 g_signal_connect_swapped(G_OBJECT(media), "position_changed",
8670 G_CALLBACK(player_position_changed_callback), tracker);
8671 g_signal_connect_swapped(G_OBJECT(media), "cache_percent_changed",
8672 G_CALLBACK(player_cache_percent_changed_callback), tracker);
8673 g_signal_connect_swapped(G_OBJECT(media), "attribute_changed",
8674 G_CALLBACK(player_attribute_changed_callback), tracker);
8675 gtk_widget_show(GTK_WIDGET(tracker));
8676
8677 // fullscreen button, pack from end for this button and the vol slider
8678 fs_event_box = gtk_button_new();
8679 gtk_button_set_image(GTK_BUTTON(fs_event_box), image_fs);
8680 gtk_button_set_relief(GTK_BUTTON(fs_event_box), GTK_RELIEF_NONE);
8681 #ifdef GTK2_12_ENABLED
8682 gtk_widget_set_tooltip_text(fs_event_box, _("Full Screen"));
8683 #else
8684 tooltip = gtk_tooltips_new();
8685 gtk_tooltips_set_tip(tooltip, fs_event_box, _("Full Screen"), NULL);
8686 #endif
8687 #ifdef GTK2_20_ENABLED
8688 gtk_widget_set_can_focus(fs_event_box, FALSE);
8689 #else
8690 GTK_WIDGET_UNSET_FLAGS(fs_event_box, GTK_CAN_FOCUS);
8691 #endif
8692 gtk_widget_set_events(fs_event_box, GDK_BUTTON_PRESS_MASK);
8693 g_signal_connect(G_OBJECT(fs_event_box), "button_press_event", G_CALLBACK(fs_callback), NULL);
8694 gtk_box_pack_end(GTK_BOX(hbox), fs_event_box, FALSE, FALSE, 0);
8695 gtk_widget_show(image_fs);
8696 if (!disable_fullscreen)
8697 gtk_widget_show(fs_event_box);
8698 // volume control
8699 if ((window_y > window_x)
8700 && (rpcontrols != NULL && g_ascii_strcasecmp(rpcontrols, "volumeslider") == 0)) {
8701 vol_slider = gtk_vscale_new_with_range(0.0, 1.0, 0.20);
8702 gtk_widget_set_size_request(vol_slider, -1, window_y);
8703 gtk_range_set_inverted(GTK_RANGE(vol_slider), TRUE);
8704 } else {
8705 #ifdef GTK2_12_ENABLED
8706 vol_slider = gtk_volume_button_new();
8707 #ifdef GTK3_ENABLED
8708 g_object_set(G_OBJECT(vol_slider), "use-symbolic", TRUE, NULL);
8709 #endif
8710 adj = gtk_scale_button_get_adjustment(GTK_SCALE_BUTTON(vol_slider));
8711 gtk_scale_button_set_adjustment(GTK_SCALE_BUTTON(vol_slider), adj);
8712 gtk_scale_button_set_value(GTK_SCALE_BUTTON(vol_slider), audio_device.volume);
8713 if (large_buttons)
8714 g_object_set(G_OBJECT(vol_slider), "size", GTK_ICON_SIZE_BUTTON, NULL);
8715 else
8716 g_object_set(G_OBJECT(vol_slider), "size", GTK_ICON_SIZE_MENU, NULL);
8717 g_signal_connect(G_OBJECT(vol_slider), "value_changed",
8718 G_CALLBACK(vol_button_value_changed_callback), idledata);
8719 gtk_button_set_relief(GTK_BUTTON(vol_slider), GTK_RELIEF_NONE);
8720 #else
8721 vol_slider = gtk_hscale_new_with_range(0.0, 1.0, 0.2);
8722 gtk_widget_set_size_request(vol_slider, 44, button_size);
8723 gtk_scale_set_draw_value(GTK_SCALE(vol_slider), FALSE);
8724 gtk_range_set_value(GTK_RANGE(vol_slider), audio_device.volume);
8725 g_signal_connect(G_OBJECT(vol_slider), "value_changed", G_CALLBACK(vol_slider_callback), idledata);
8726 #endif
8727 }
8728 #ifdef GTK2_12_ENABLED
8729 // no tooltip on the volume_button is needed
8730 // gtk_widget_set_tooltip_text(vol_slider, idledata->vol_tooltip);
8731 #else
8732 volume_tip = gtk_tooltips_new();
8733 gtk_tooltips_set_tip(volume_tip, vol_slider, _("Volume 100%"), NULL);
8734 #endif
8735 gtk_box_pack_end(GTK_BOX(hbox), vol_slider, FALSE, FALSE, 0);
8736 #ifdef GTK2_20_ENABLED
8737 gtk_widget_set_can_focus(vol_slider, FALSE);
8738 #else
8739 GTK_WIDGET_UNSET_FLAGS(vol_slider, GTK_CAN_FOCUS);
8740 #endif
8741 gtk_widget_show(vol_slider);
8742 gtk_widget_realize(window);
8743 return window;
8744 }
8745
show_window(gint windowid)8746 void show_window(gint windowid)
8747 {
8748 gint i;
8749 gchar **visuals;
8750 if (windowid != 0 && embedding_disabled == FALSE) {
8751 gm_log(verbose, G_LOG_LEVEL_DEBUG, "waiting for all events to drain");
8752 while (gtk_events_pending())
8753 gtk_main_iteration();
8754 #ifdef GTK2_24_ENABLED
8755 window_container = gdk_x11_window_foreign_new_for_display(gdk_display_get_default(), windowid);
8756 #else
8757 window_container = gdk_window_foreign_new(windowid);
8758 #endif
8759 #ifdef GTK2_20_ENABLED
8760 if (gtk_widget_get_mapped(window))
8761 gtk_widget_unmap(window);
8762 #else
8763 if (GTK_WIDGET_MAPPED(window))
8764 gtk_widget_unmap(window);
8765 #endif
8766 gdk_window_reparent(gmtk_get_window(window), window_container, 0, 0);
8767 }
8768
8769 if (rpcontrols == NULL || (rpcontrols != NULL && g_ascii_strcasecmp(rpcontrols, "all") == 0)) {
8770 if (windowid != -1)
8771 gtk_widget_show_all(window);
8772 gtk_widget_hide(media_hbox);
8773 if (gmtk_media_player_get_media_type(GMTK_MEDIA_PLAYER(media)) == TYPE_DVD) {
8774 gtk_widget_show(menu_event_box);
8775 } else {
8776 gtk_widget_hide(menu_event_box);
8777 }
8778 gtk_widget_hide(audio_meter);
8779 if (disable_fullscreen)
8780 gtk_widget_hide(fs_event_box);
8781 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_showcontrols), showcontrols);
8782 if (windowid > 0) {
8783 if (window_x < 250) {
8784 gtk_widget_hide(rew_event_box);
8785 gtk_widget_hide(ff_event_box);
8786 gtk_widget_hide(fs_event_box);
8787 }
8788
8789 if (window_x < 170) {
8790 gtk_widget_hide(GTK_WIDGET(tracker));
8791 }
8792 if (window_x > 0 && window_y > 0) {
8793 gtk_window_resize(GTK_WINDOW(window), window_x, window_y);
8794 gtk_widget_set_size_request(window, window_x, window_y);
8795 }
8796 } else {
8797 gtk_widget_set_size_request(window, -1, -1);
8798 gtk_widget_set_size_request(GTK_WIDGET(tracker), 200, -1);
8799 }
8800
8801 } else {
8802
8803 if (windowid != -1)
8804 gtk_widget_show_all(window);
8805 gtk_widget_hide(media);
8806 gtk_widget_hide(menubar);
8807 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), FALSE);
8808 gtk_widget_hide(menu_event_box);
8809 gtk_widget_hide(audio_meter);
8810 gtk_widget_hide(controls_box);
8811 gm_log(verbose, G_LOG_LEVEL_MESSAGE, "showing the following controls = %s", rpcontrols);
8812 visuals = g_strsplit(rpcontrols, ",", 0);
8813 i = 0;
8814 while (visuals[i] != NULL) {
8815 if (g_ascii_strcasecmp(visuals[i], "statusbar") == 0
8816 || g_ascii_strcasecmp(visuals[i], "statusfield") == 0
8817 || g_ascii_strcasecmp(visuals[i], "positionfield") == 0
8818 || g_ascii_strcasecmp(visuals[i], "positionslider") == 0) {
8819 gtk_widget_show(GTK_WIDGET(tracker));
8820 gtk_widget_show(controls_box);
8821 gtk_widget_show(hbox);
8822 gtk_widget_hide(menu_event_box);
8823 gtk_widget_hide(media);
8824 control_instance = FALSE;
8825 }
8826 if (g_ascii_strcasecmp(visuals[i], "infovolumepanel") == 0) {
8827 gtk_widget_show(GTK_WIDGET(vol_slider));
8828 gtk_widget_show(controls_box);
8829 gtk_widget_show(hbox);
8830 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), TRUE);
8831 control_instance = FALSE;
8832 }
8833 if (g_ascii_strcasecmp(visuals[i], "infopanel") == 0) {
8834 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_info), TRUE);
8835 control_instance = FALSE;
8836 }
8837
8838 if (g_ascii_strcasecmp(visuals[i], "volumeslider") == 0) {
8839 gtk_widget_show(GTK_WIDGET(vol_slider));
8840 gtk_widget_show(controls_box);
8841 gtk_widget_show(hbox);
8842 }
8843 if (g_ascii_strcasecmp(visuals[i], "playbutton") == 0) {
8844 gtk_widget_show_all(GTK_WIDGET(play_event_box));
8845 gtk_widget_show(controls_box);
8846 gtk_widget_show(hbox);
8847 }
8848 if (g_ascii_strcasecmp(visuals[i], "stopbutton") == 0) {
8849 gtk_widget_show_all(GTK_WIDGET(stop_event_box));
8850 gtk_widget_show(controls_box);
8851 gtk_widget_show(hbox);
8852 }
8853 if (g_ascii_strcasecmp(visuals[i], "pausebutton") == 0) {
8854 gtk_widget_show_all(GTK_WIDGET(play_event_box));
8855 gtk_widget_show(controls_box);
8856 gtk_widget_show(hbox);
8857 }
8858 if (g_ascii_strcasecmp(visuals[i], "ffctrl") == 0) {
8859 gtk_widget_show_all(GTK_WIDGET(ff_event_box));
8860 gtk_widget_show(controls_box);
8861 gtk_widget_show(hbox);
8862 }
8863 if (g_ascii_strcasecmp(visuals[i], "rwctrl") == 0) {
8864 gtk_widget_show_all(GTK_WIDGET(rew_event_box));
8865 gtk_widget_show(controls_box);
8866 gtk_widget_show(hbox);
8867 }
8868
8869 if (g_ascii_strcasecmp(visuals[i], "imagewindow") == 0) {
8870 gtk_widget_show_all(GTK_WIDGET(media));
8871 control_instance = FALSE;
8872 }
8873
8874 if (g_ascii_strcasecmp(visuals[i], "controlpanel") == 0) {
8875 gtk_widget_show(controls_box);
8876 gtk_widget_show_all(hbox);
8877 gtk_widget_hide(GTK_WIDGET(tracker));
8878 gtk_widget_hide(menu_event_box);
8879 gtk_widget_hide(media);
8880 }
8881
8882 i++;
8883 }
8884
8885
8886 }
8887
8888 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_fullscreen), FALSE);
8889 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_details), FALSE);
8890 gtk_widget_set_sensitive(GTK_WIDGET(fs_event_box), FALSE);
8891 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_loop), FALSE);
8892 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_play_single), FALSE);
8893 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_subtitle), FALSE);
8894 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_set_audiofile), FALSE);
8895 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_take_screenshot), FALSE);
8896 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_select_audio_lang), FALSE);
8897 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_select_sub_lang), FALSE);
8898 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_info), FALSE);
8899 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_fullscreen), FALSE);
8900 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_onetoone), FALSE);
8901 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_onetotwo), FALSE);
8902 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_twotoone), FALSE);
8903 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_onetoonepointfive), FALSE);
8904 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect), FALSE);
8905 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_default), FALSE);
8906 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_four_three), FALSE);
8907 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_sixteen_nine), FALSE);
8908 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_sixteen_ten), FALSE);
8909 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_anamorphic), FALSE);
8910 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_aspect_follow_window), FALSE);
8911 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_subtitles), FALSE);
8912 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_smaller_subtitle), FALSE);
8913 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_larger_subtitle), FALSE);
8914 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_decrease_subtitle_delay), FALSE);
8915 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_increase_subtitle_delay), FALSE);
8916 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_angle), FALSE);
8917 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_view_advanced), FALSE);
8918 gtk_widget_set_sensitive(GTK_WIDGET(menuitem_edit_random), FALSE);
8919 gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
8920 gtk_widget_hide(prev_event_box);
8921 gtk_widget_hide(next_event_box);
8922 gtk_widget_hide(GTK_WIDGET(menuitem_prev));
8923 gtk_widget_hide(GTK_WIDGET(menuitem_next));
8924 gtk_widget_hide(media_hbox);
8925 gtk_widget_hide(audio_meter);
8926 gtk_widget_hide(plvbox);
8927 gtk_widget_hide(details_vbox);
8928 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem_view_details), details_visible);
8929 gtk_widget_hide(GTK_WIDGET(menuitem_edit_switch_audio));
8930 if (keep_on_top)
8931 gtk_window_set_keep_above(GTK_WINDOW(window), keep_on_top);
8932 update_status_icon();
8933 }
8934
present_main_window()8935 void present_main_window()
8936 {
8937 gtk_window_present(GTK_WINDOW(window));
8938 }
8939
logdb(double v)8940 static inline double logdb(double v)
8941 {
8942 if (v > 1)
8943 return 0;
8944 if (v <= 1E-8)
8945 return METER_BARS - 1;
8946 return log(v) / -0.23025850929940456840179914546843642076;
8947 }
8948
update_audio_meter(gpointer data)8949 gboolean update_audio_meter(gpointer data)
8950 {
8951 gint i, channel;
8952 gfloat f;
8953 gint max;
8954 //gfloat freq;
8955 gfloat v;
8956 //gfloat lsb16, rsb16;
8957 Export *export;
8958 //gint bucketid;
8959 static gint update_counter = 0;
8960 static gint export_counter = 0;
8961 gboolean refresh;
8962 #define UAM_HISTOGRAM_SIZE 65536
8963 long long histogram[UAM_HISTOGRAM_SIZE];
8964 gint histogramloc;
8965 gint thispayloadni;
8966 gint thispayloadnch;
8967 gint bucketi;
8968
8969 if (!gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem_view_meter)))
8970 return TRUE;
8971 if (gmtk_media_player_get_media_state(GMTK_MEDIA_PLAYER(media)) != MEDIA_STATE_PLAY)
8972 return TRUE;
8973 if (audio_meter != NULL && gmtk_get_visible(audio_meter)) {
8974
8975 if (data)
8976 g_array_free(data, TRUE);
8977 if (max_data)
8978 g_array_free(max_data, TRUE);
8979 data = g_array_new(FALSE, TRUE, sizeof(gfloat));
8980 max_data = g_array_new(FALSE, TRUE, sizeof(gfloat));
8981 for (i = 0; i < METER_BARS; i++) {
8982 buckets[i] = 0;
8983 }
8984
8985 refresh = FALSE;
8986 reading_af_export = TRUE;
8987 export = NULL;
8988 if (idledata->mapped_af_export != NULL)
8989 export = (Export *) g_mapped_file_get_contents(idledata->mapped_af_export);
8990 if (export != NULL) {
8991 if (export->counter != export_counter) {
8992 /*
8993 for (i = 0; export != NULL && i < (export->size / (export->nch * sizeof(gint16))); i++) {
8994 freq = 0;
8995
8996 // this is an testing meter for two channel
8997 for (j = 0; j < export->nch; j++) {
8998 // scale SB16 data to 0 - 22000 range, believe this is Hz now
8999 freq += (export->payload[j][i]) * 22000 / (32768 * export->nch);
9000 }
9001 // ignore values below 20, as this is unaudible and may skew data
9002 if (freq > (22000.0 / METER_BARS)) {
9003 bucketid = (gint) (freq / (gfloat) (22000.0 / (gfloat) METER_BARS)) - 1;
9004 if (bucketid >= METER_BARS) {
9005 printf("bucketid = %i freq = %f\n", bucketid, freq);
9006 bucketid = METER_BARS - 1;
9007 }
9008 buckets[bucketid]++;
9009 }
9010
9011 }
9012 export_counter = export->counter;
9013 refresh = TRUE;
9014 */
9015 for (histogramloc = 0; histogramloc < UAM_HISTOGRAM_SIZE; histogramloc++) {
9016 histogram[histogramloc] = 0;
9017 }
9018 thispayloadni = (export->size / (export->nch * sizeof(gint16)));
9019 if (thispayloadni > PAYLOADNI) {
9020 thispayloadni = PAYLOADNI;
9021 }
9022 if (thispayloadni < 0) {
9023 thispayloadni = 0;
9024 }
9025 thispayloadnch = export->nch;
9026 if (thispayloadnch > PAYLOADNCH) {
9027 thispayloadnch = PAYLOADNCH;
9028 }
9029 if (thispayloadnch < 0) {
9030 thispayloadnch = 0;
9031 }
9032 for (i = 0; export != NULL && i < thispayloadni; i++) {
9033 for (channel = 0; channel < thispayloadnch; channel++) {
9034 // scale SB16 data to 0 - 22000 range, believe this is Hz now
9035 histogramloc = export->payload[channel][i] + 32768;
9036 if (histogramloc >= 0 && histogramloc < UAM_HISTOGRAM_SIZE) {
9037 histogram[histogramloc]++;
9038 }
9039 }
9040 }
9041 for (histogramloc = 0; histogramloc < UAM_HISTOGRAM_SIZE; histogramloc++) {
9042 v = (histogramloc - 32768) / 32768.0;
9043 bucketi = (gint) (logdb(v * v) / 2.0);
9044 if (bucketi < METER_BARS) {
9045 buckets[bucketi] += histogram[histogramloc];
9046 }
9047 }
9048 buckets[0] = buckets[1] - (buckets[2] - buckets[1]);
9049 if (buckets[0] < 0)
9050 buckets[0] = 0;
9051 export_counter = export->counter;
9052 refresh = TRUE;
9053 }
9054 // g_free(export);
9055 /*
9056 if (export->counter > export_counter) {
9057 for (j =0; j < export->nch ; j++) {
9058 lsb16 = 0;
9059 for(i=0; i < (export->size / ( export->nch * sizeof(gint16))); i++) {
9060 lsb16 += export->payload[j][i];
9061 bucketid = abs(lsb16) * METER_BARS / 1000000;
9062 buckets[bucketid - 1]++;
9063 }
9064 }
9065 export_counter = export->counter;
9066 refresh = TRUE;
9067 }
9068 */
9069 }
9070 reading_af_export = FALSE;
9071 if (refresh) {
9072 max = 0;
9073 update_counter++;
9074 for (i = 0; i < METER_BARS; i++) {
9075 if (buckets[i] > max_buckets[i]) {
9076 max_buckets[i] = buckets[i];
9077 } else {
9078 // raise this value for slower melting of max
9079 if (update_counter % 1 == 0) {
9080 update_counter = 0;
9081 max_buckets[i]--;
9082 if (max_buckets[i] < 0)
9083 max_buckets[i] = 0;
9084 }
9085 }
9086
9087 if (max_buckets[i] > max)
9088 max = max_buckets[i];
9089 }
9090
9091 for (i = 0; i < METER_BARS; i++) {
9092 if (max == 0) {
9093 f = 0.0;
9094 g_array_append_val(data, f);
9095 g_array_append_val(max_data, f);
9096 } else {
9097 f = logf((gfloat) buckets[i]) / logf((gfloat) max);
9098 // f = ((gfloat) buckets[i]) / ((gfloat) max);
9099 g_array_append_val(data, f);
9100 f = logf((gfloat) max_buckets[i]) / logf((gfloat) max);
9101 // f = ((gfloat) max_buckets[i]) / ((gfloat) max);
9102 g_array_append_val(max_data, f);
9103 }
9104 }
9105
9106 gmtk_audio_meter_set_data_full(GMTK_AUDIO_METER(audio_meter), data, max_data);
9107 }
9108 }
9109 return TRUE;
9110 }
9111
9112
show_fs_controls()9113 void show_fs_controls()
9114 {
9115 gint x, y;
9116 GdkScreen *screen;
9117 GdkRectangle rect;
9118 GtkAllocation alloc;
9119 #ifdef GTK3_ENABLED
9120 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
9121 #endif
9122
9123
9124 g_mutex_lock(fs_controls_lock);
9125 if (fs_controls == NULL && fullscreen) {
9126 fs_controls = gtk_window_new(GTK_WINDOW_POPUP);
9127 gtk_widget_add_events(fs_controls, GDK_ENTER_NOTIFY_MASK);
9128 gtk_widget_add_events(fs_controls, GDK_LEAVE_NOTIFY_MASK);
9129 g_signal_connect(G_OBJECT(fs_controls), "enter_notify_event", G_CALLBACK(fs_controls_entered), NULL);
9130 g_signal_connect(G_OBJECT(fs_controls), "leave_notify_event", G_CALLBACK(fs_controls_left), NULL);
9131 gtk_window_set_transient_for(GTK_WINDOW(fs_controls), GTK_WINDOW(fs_window));
9132 }
9133 if (fs_controls != NULL && fullscreen) {
9134 #ifdef GTK3_ENABLED
9135 if (gtk_icon_theme_has_icon(icon_theme, "view-restore-symbolic")) {
9136 gtk_image_set_from_icon_name(GTK_IMAGE(image_fs), "view-restore-symbolic", button_size);
9137 } else {
9138 gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_LEAVE_FULLSCREEN, button_size);
9139 }
9140 #else
9141 gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_LEAVE_FULLSCREEN, button_size);
9142 #endif
9143 if (gtk_widget_get_parent(GTK_WIDGET(hbox)) == controls_box) {
9144 g_object_ref(hbox);
9145 gtk_container_remove(GTK_CONTAINER(controls_box), hbox);
9146 gtk_container_add(GTK_CONTAINER(fs_controls), hbox);
9147 g_object_unref(hbox);
9148 }
9149 gtk_widget_show(fs_controls);
9150 #ifdef GTK3_ENABLED
9151 gtk_widget_set_opacity(GTK_WIDGET(fs_controls), 0.75);
9152 #else
9153 #ifdef GTK2_12_ENABLED
9154 gtk_window_set_opacity(GTK_WINDOW(fs_controls), 0.75);
9155 #endif
9156 #endif
9157
9158 screen = gtk_window_get_screen(GTK_WINDOW(window));
9159 gtk_window_set_screen(GTK_WINDOW(fs_controls), screen);
9160 gdk_screen_get_monitor_geometry(screen, gdk_screen_get_monitor_at_window(screen, gmtk_get_window(window)),
9161 &rect);
9162 gmtk_get_allocation(fs_controls, &alloc);
9163 gtk_widget_set_size_request(fs_controls, rect.width / 2, alloc.height);
9164 x = rect.x + (rect.width / 4);
9165 y = rect.y + rect.height - alloc.height;
9166 gtk_window_move(GTK_WINDOW(fs_controls), x, y);
9167 }
9168 g_mutex_unlock(fs_controls_lock);
9169
9170 }
9171
hide_fs_controls()9172 void hide_fs_controls()
9173 {
9174 #ifdef GTK3_ENABLED
9175 GtkIconTheme *icon_theme = gtk_icon_theme_get_default();
9176 #endif
9177
9178 g_mutex_lock(fs_controls_lock);
9179 if (fs_controls != NULL) {
9180 #ifdef GTK3_ENABLED
9181 if (gtk_icon_theme_has_icon(icon_theme, "view-fullscreen-symbolic")) {
9182 gtk_image_set_from_icon_name(GTK_IMAGE(image_fs), "view-fullscreen-symbolic", button_size);
9183 } else {
9184 gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_FULLSCREEN, button_size);
9185 }
9186 #else
9187 gtk_image_set_from_stock(GTK_IMAGE(image_fs), GTK_STOCK_FULLSCREEN, button_size);
9188 #endif
9189 if (gtk_widget_get_parent(GTK_WIDGET(hbox)) == fs_controls) {
9190 g_object_ref(hbox);
9191 gtk_container_remove(GTK_CONTAINER(fs_controls), hbox);
9192 gtk_container_add(GTK_CONTAINER(controls_box), hbox);
9193 g_object_unref(hbox);
9194 }
9195 if (fullscreen) {
9196 gtk_widget_hide(GTK_WIDGET(fs_controls));
9197 } else {
9198 gtk_widget_destroy(GTK_WIDGET(fs_controls));
9199 fs_controls = NULL;
9200 }
9201 }
9202 g_mutex_unlock(fs_controls_lock);
9203
9204 }
9205