/** @copydoc widgetdata::event_func */ static int widget_event(widgetdata *widget, SDL_Event *event) { size_t i; if (list_mplayer) { if (list_handle_mouse(list_mplayer, event)) { widget->redraw = 1; return 1; } else if (scrollbar_event(&scrollbar_progress, event)) { widget->redraw = 1; return 1; } } for (i = 0; i < BUTTON_NUM; i++) { if (button_event(&buttons[i], event)) { switch (i) { case BUTTON_PLAY: if (sound_map_background(-1)) { sound_start_bg_music("no_music", 0, 0); sound_map_background(0); shuffle = 0; } else { list_handle_enter(list_mplayer, event); } break; case BUTTON_SHUFFLE: shuffle = !shuffle; if (shuffle) { mplayer_do_shuffle(list_mplayer); sound_map_background(1); } else { sound_start_bg_music("no_music", 0, 0); sound_map_background(0); } break; case BUTTON_BLACKLIST: /* Toggle the blacklist state of the selected row. */ mplayer_blacklist_toggle(list_mplayer); mplayer_blacklist_save(list_mplayer); break; case BUTTON_CLOSE: widget->show = 0; break; case BUTTON_HELP: help_show("music player"); break; } widget->redraw = 1; return 1; } if (buttons[i].redraw) { widget->redraw = 1; } } return 0; }
/** * Handle event in the main screen. * @param event * The event to handle. * @return * 1 if the event was handled, 0 otherwise. */ int intro_event(SDL_Event *event) { if (!list_servers) { return 0; } if (event->type == SDL_MOUSEBUTTONDOWN && event->button.button == SDL_BUTTON_LEFT) { if (LIST_MOUSE_OVER(list_news, event->motion.x, event->motion.y)) { list_news->focus = 1; list_servers->focus = 0; } else if (LIST_MOUSE_OVER(list_servers, event->motion.x, event->motion.y)) { list_servers->focus = 1; list_news->focus = 0; } } if (button_event(&button_play, event)) { list_handle_enter(list_servers, event); return 1; } else if (button_event(&button_refresh, event)) { if (!ms_connecting(-1)) { cpl.state = ST_META; } return 1; } else if (button_event(&button_server, event)) { server_add_open(); return 1; } else if (button_event(&button_settings, event)) { settings_open(); return 1; } else if (button_event(&button_update, event)) { updater_open(); return 1; } else if (button_event(&button_help, event)) { help_show("main screen"); return 1; } else if (button_event(&button_credits, event)) { credits_show(); return 1; } else if (button_event(&button_quit, event)) { exit(0); return 1; } else if (event->type == SDL_KEYDOWN && event->key.keysym.sym == SDLK_TAB && list_news) { int news_focus = 0; if (list_servers->focus) { news_focus = 1; } list_news->focus = news_focus; list_servers->focus = !news_focus; } else if (list_handle_keyboard(list_news && list_news->focus ? list_news : list_servers, event)) { return 1; } else if (list_handle_mouse(list_news, event)) { return 1; } else if (list_handle_mouse(list_servers, event)) { return 1; } return 0; }