diff --git a/src/bin/ui/ui.c b/src/bin/ui/ui.c index 764d677..396ebb2 100644 --- a/src/bin/ui/ui.c +++ b/src/bin/ui/ui.c @@ -173,7 +173,7 @@ _menu_memory_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, { Ui *ui = data; - ui_win_memory_add(ui, ui->menu_parent); + ui_win_memory_add(ui, NULL); } static void @@ -182,7 +182,7 @@ _menu_disk_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, { Ui *ui = data; - ui_win_disk_add(ui, ui->menu_parent); + ui_win_disk_add(ui, NULL); } static void @@ -191,7 +191,7 @@ _menu_sensors_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, { Ui *ui = data; - ui_win_sensors_add(ui, ui->menu_parent); + ui_win_sensors_add(ui, NULL); } static void @@ -200,7 +200,7 @@ _menu_cpu_activity_clicked_cb(void *data, Evas_Object *obj EINA_UNUSED, { Ui *ui = data; - ui_win_cpu_add(ui, ui->menu_parent); + ui_win_cpu_add(ui, NULL); } static void @@ -298,7 +298,7 @@ _menu_focus_cb(void *data) return EINA_FALSE; } -void +Evas_Object * evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent, Evas_Object *obj) { Evas_Object *o, *bx, *bx2, *hbox, *sep, *fr, *sli; @@ -326,7 +326,6 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent, Evas_Object *obj) elm_object_content_set(fr, bx); elm_object_content_set(o, fr); - ui->menu_parent = parent; hbox = elm_box_add(o); elm_box_horizontal_set(hbox, 1); evas_object_size_hint_align_set(hbox, FILL, FILL); @@ -371,6 +370,17 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent, Evas_Object *obj) elm_box_pack_end(hbox, btn); elm_box_pack_end(bx, hbox); + + elm_ctxpopup_direction_priority_set(o, ELM_CTXPOPUP_DIRECTION_UP, + ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_LEFT, + ELM_CTXPOPUP_DIRECTION_RIGHT); + evas_object_move(o, ox + (ow / 2), oy + oh); + evas_object_show(o); + ecore_timer_add(0.5, _menu_focus_cb, it_focus); + + if (parent != ui->proc.win) return o; + fr = elm_frame_add(o); elm_object_text_set(fr, _("Options")); evas_object_size_hint_weight_set(fr, EXPAND, EXPAND); @@ -430,14 +440,7 @@ evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent, Evas_Object *obj) elm_object_content_set(fr, bx2); elm_box_pack_end(bx, fr); - elm_ctxpopup_direction_priority_set(o, ELM_CTXPOPUP_DIRECTION_UP, - ELM_CTXPOPUP_DIRECTION_DOWN, - ELM_CTXPOPUP_DIRECTION_LEFT, - ELM_CTXPOPUP_DIRECTION_RIGHT); - evas_object_move(o, ox + (ow / 2), oy + oh); - evas_object_show(o); - ui->menu = o; - ecore_timer_add(0.5, _menu_focus_cb, it_focus); + return o; } static void diff --git a/src/bin/ui/ui.h b/src/bin/ui/ui.h index 785ad31..8e31efb 100644 --- a/src/bin/ui/ui.h +++ b/src/bin/ui/ui.h @@ -38,8 +38,6 @@ typedef struct Ui } proc; Evas_Object *win_about; - Evas_Object *menu; - Evas_Object *menu_parent; struct { @@ -85,7 +83,7 @@ evisum_ui_init(void); void evisum_ui_shutdown(Ui *ui); -void +Evas_Object * evisum_ui_main_menu_create(Ui *ui, Evas_Object *parent, Evas_Object *obj); void diff --git a/src/bin/ui/ui_cpu.c b/src/bin/ui/ui_cpu.c index 18da922..d91ea29 100644 --- a/src/bin/ui/ui_cpu.c +++ b/src/bin/ui/ui_cpu.c @@ -13,6 +13,8 @@ typedef struct { Ecore_Thread *thread; Evas_Object *win; + Evas_Object *menu; + Evas_Object *btn_menu; Evas_Object *bg; Evas_Object *obj; @@ -432,6 +434,22 @@ _colors_fill(Evas_Object *colors) evas_object_image_data_update_add(colors, 0, 0, 101, 1); } +static void +_win_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord w, h; + Evas_Event_Mouse_Move *ev; + Animate *ad = data; + + ev = event_info; + evas_object_geometry_get(obj, NULL, NULL, &w, &h); + + if (ev->cur.output.x >= (w - 128) && ev->cur.output.y <= 128) + evas_object_show(ad->btn_menu); + else + evas_object_hide(ad->btn_menu); +} + static void _win_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { @@ -448,11 +466,28 @@ _win_key_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) evas_object_del(ad->ui->cpu.win); } +static void +_btn_menu_clicked_cb(void *data, Evas_Object *obj, + void *event_info EINA_UNUSED) +{ + Ui *ui; + Animate *ad = data; + + ui = ad->ui; + if (!ad->menu) + ad->menu = evisum_ui_main_menu_create(ui, ui->cpu.win, obj); + else + { + evas_object_del(ad->menu); + ad->menu = NULL; + } +} + static Animate * _graph(Ui *ui, Evas_Object *parent) { Evas_Object *tbl, *tbl2, *box, *obj, *ic, *lb, *rec; - Evas_Object *fr, *bx, *hbx, *colors, *check; + Evas_Object *fr, *bx, *hbx, *colors, *check, *btn; int i, f; char buf[128]; @@ -570,6 +605,17 @@ _graph(Ui *ui, Evas_Object *parent) ad->explainers = eina_list_append(ad->explainers, exp); } + ad->btn_menu = btn = elm_button_add(parent); + ic = elm_icon_add(btn); + elm_icon_standard_set(ic, evisum_icon_path_get("menu")); + elm_object_part_content_set(btn, "icon", ic); + evas_object_size_hint_min_set(ic, ELM_SCALE_SIZE(16), 1); + evas_object_show(ic); + evas_object_size_hint_weight_set(btn, 1.0, 1.0); + evas_object_size_hint_align_set(btn, 1.0, 0); + evas_object_smart_callback_add(btn, "clicked", _btn_menu_clicked_cb, ad); + elm_table_pack(tbl, btn, 0, 0, 5, ad->cpu_count); + bx = elm_box_add(box); evas_object_size_hint_align_set(bx, FILL, FILL); evas_object_size_hint_weight_set(bx, EXPAND, EXPAND); @@ -767,6 +813,7 @@ ui_win_cpu_add(Ui *ui, Evas_Object *parent) ad = _graph(ui, box); evas_object_event_callback_add(scroller, EVAS_CALLBACK_KEY_DOWN, _win_key_down_cb, ad); + evas_object_event_callback_add(scroller, EVAS_CALLBACK_MOUSE_MOVE, _win_mouse_move_cb, ad); elm_object_content_set(scroller, box); elm_object_content_set(win, scroller); diff --git a/src/bin/ui/ui_process_list.c b/src/bin/ui/ui_process_list.c index 757f101..47fb6ba 100644 --- a/src/bin/ui/ui_process_list.c +++ b/src/bin/ui/ui_process_list.c @@ -27,6 +27,7 @@ typedef struct Ui *ui; Evas_Object *win; + Evas_Object *main_menu; Evas_Object *menu; pid_t selected_pid; @@ -508,8 +509,6 @@ _content_get(void *data, Evas_Object *obj, const char *source) if (!EINA_DBL_EQ(value, last)) elm_progressbar_value_set(pb, proc->cpu_usage / 100.0); evas_object_show(pb); - // Let the genlist resize but align the text. - elm_table_align_set(it->obj, 0, 0.5); return it->obj; } @@ -1159,12 +1158,12 @@ static void _main_menu_dismissed_cb(void *data, Evas_Object *obj EINA_UNUSED, void *ev EINA_UNUSED) { - Ui *ui = data; + Ui_Data *pd = data; - elm_ctxpopup_dismiss(ui->menu); - evas_object_del(ui->menu); + elm_ctxpopup_dismiss(pd->main_menu); + evas_object_del(pd->main_menu); - ui->menu = NULL; + pd->main_menu = NULL; } static Evas_Object * @@ -1194,12 +1193,16 @@ static void _btn_menu_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { - Ui *ui = data; + Ui_Data *pd; + Ui *ui; - if (!ui->menu) - evisum_ui_main_menu_create(ui, ui->proc.win, obj); + pd = data; + ui = pd->ui; + + if (!pd->main_menu) + pd->main_menu = evisum_ui_main_menu_create(ui, ui->proc.win, obj); else - _main_menu_dismissed_cb(ui, NULL, NULL); + _main_menu_dismissed_cb(pd, NULL, NULL); } static void @@ -1243,7 +1246,7 @@ _ui_content_system_add(Ui_Data *pd, Evas_Object *parent) elm_table_padding_set(tbl, PAD_W, 0); pd->btn_menu = btn = _btn_create(tbl, "menu", _("Menu"), - _btn_menu_clicked_cb, ui); + _btn_menu_clicked_cb, pd); elm_table_pack(tbl, btn, i++, 1, 1, 1); pd->btn_cmd = btn = elm_button_add(parent); @@ -1558,8 +1561,8 @@ _win_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) elm_genlist_realized_items_update(pd->genlist); evas_object_lower(pd->entry_pop); - if (ui->menu) - _main_menu_dismissed_cb(ui, NULL, NULL); + if (pd->main_menu) + _main_menu_dismissed_cb(pd, NULL, NULL); if (!pd->resize_timer) pd->resize_timer = ecore_timer_add(0.1, _resize_timer_cb, pd); diff --git a/src/bin/ui/ui_util.c b/src/bin/ui/ui_util.c index e23a084..f810e0b 100644 --- a/src/bin/ui/ui_util.c +++ b/src/bin/ui/ui_util.c @@ -403,9 +403,13 @@ evisum_about_window_show(void *data) ui = data; - if (ui->win_about) return; + if (ui->win_about) + { + elm_win_raise(ui->win_about); + return; + } - ui->win_about = win = elm_win_add(ui->menu_parent, "evisum", ELM_WIN_DIALOG_BASIC); + ui->win_about = win = elm_win_util_standard_add("evisum", "evisum"); elm_win_autodel_set(win, EINA_TRUE); elm_win_title_set(win, _("About"));