WM со вкладками

Автор doctor@tardis, 24 ноября 2013, 19:12:22

« назад - далее »

0 Пользователи и 3 гостей просматривают эту тему.

doctor@tardis

Здрасти еще раз.
Вот захотелось поставить такой рабочий стол, чтоб он состоял из вкладок: вкладка для игр, вкладка для офисных программ и т.п. Есть ли такое? Думаю есть.. но а если нету, можно ли "создать" из какого-нибудь готового wm, например ОБ?

Сообщение объединено: 24 ноября 2013, 19:32:08

Кстати, нечто похожее есть для нетбуков, дистрибутив под названием Easy Peasy..
Но там целый DE и он наверное жрет память, а нужно что-нибудь полегче..

I-Jurij

Нечто похожее можно сделать с менюшками разделов (игры там, офис и тд).  http://habrahabr.ru/sandbox/61115/
Запуск lxlauncher и его постоянное наличие на рабочем столе даст, наверное, тот результат который вам нужен. http://images.yandex.ua/yandsearch?stype=image&lr=959&source=psearch&text=lxlauncher%20screenshot
Кроме того есть sugar wm, который ставят (или ставили, не знаю жив ли проект) на One Laptop per Child (OLPC). http://en.wikipedia.org/wiki/Sugar_(software)

doctor@tardis

I-Jurij, Спасибо! То что я искал!

dogsleg

#3
См. фреймовые менеджеры. Например, awesome (настройка на Lua) или xmonad (настройка на Haskell). Сам сижу на последнем, мне он кажется более стабильным и гибким.

I-Jurij

Цитата: doctor@tardis от 24 ноября 2013, 21:05:41
I-Jurij, Спасибо! То что я искал!
Рад, что смог помочь.
И - что именно из перечисленного подошло? (может сам что-то подобное сваяю в свободное время).

doctor@tardis

I-Jurij, lxlauncher очень понравился. Как раз то, что я искал. Я пока не знаю, насколько он настраиваемый, но если все так, как я думаю - он просто идеален для детей, для офисов и т.п. В одной вкладке можно хранить программы, в другой нужные файлы, в третьей всякую мелочь и т.д. И если между вкладками можно перемещаться с помощью горячих клавиш - это просто фантастика. Такая панелька очень подойдет для офисов, если компьютеры на лине, то можно просто сделать свой дистр с таким делением на разделы - думаю это куда удобнее, чем что-либо другое. Чем засорять рабочий стол иконками, или искать каждую программу в "пуске", в лаунчере или т.п., гораздо легче ориентироваться вот в таких вот вкладках.

SeHELLioN

комнаты кед же :) но да, возможно, тяжеловаты
Asus m5a97+Amd fx-8350+4x4GB DDR3 1600MGz+asus gtx670 DCII (перешита в top)
Debian stable

doctor@tardis

Problems.. problems everywhere!    :'(

Lxlauncher не поддерживает обоину.. хотя вот в ddlinux они как-то поставили ее.. просто копирование их файлов из home/.config/lxlauncher/, /usr/share/lxlauncher/ и /etc/xdg/lxlauncher/ на свою систему не помогло..  :'( Что мне деееелать :'(

Brainey

Конференция форума в jabber: debianforum@conference.jabber.ru | Клуб кедоводов: kde@conference.jabber.ru

I-Jurij

#9
В doodoo собирали лаунчер с патчем, который есть на соурсфордже (недавно сам в это влез).

Сообщение объединено: 30 ноября 2013, 18:49:22

Цитата: Brainey от 30 ноября 2013, 18:22:21
Цитата: doctor@tardis от 30 ноября 2013, 17:00:57Lxlauncher не поддерживает обоину..
feh, не?
Здесь как-бы не обоина, а фон для ланчера.

Сам патч:

From 6947858098dc0ff9d6ceb3ae520123ea721bab0b Mon Sep 17 00:00:00 2001
From: Chris Harrington <chris@harrington.jp>
Date: Tue, 14 Sep 2010 12:59:00 +0900
Subject: [PATCH] Modify lxlauncher.c to allow setting the cairo_t viewport
background color for the notebook widget in the settings.conf file.

Modify lxlauncher.c to allow setting the notebook tab icon size in
the settings.conf file.

Modify settings.conf to reflect source changes and gtkrc to default
to system wide Gtk+ theme.

Modify README to document settings.conf.

On branch master
Changes to be committed:
   (use "git reset HEAD <file>..." to unstage)

modified:   README
modified:   gtkrc
modified:   settings.conf.in
modified:   src/lxlauncher.c
---
README           |   23 +++++++-----
gtkrc            |   25 +++++--------
settings.conf.in |    4 ++
src/lxlauncher.c |  105 +++++++++++++++++++++++++----------------------------
4 files changed, 77 insertions(+), 80 deletions(-)

diff --git a/README b/README
index 4df0f04..668f6ba 100644
--- a/README
+++ b/README
@@ -1,13 +1,18 @@
LXLauncher is an open source clone of Asus launcher for EeePC.
It outperformes the original launcher developed by Xandros.

-Background images used by Asus launcher are non-free and are
-hence not included in this package.
-
-Please put the images in /usr/share/lxlauncher/backround.
-LXLauncher will use those background images if available.
-
-Also, if you put the tab icons of Asus launcher under
-/usr/share/lxlauncher/icons, they will be used in the tabs.
-Otherwise, some icons from the gtk+ icon theme will be used instead.
+Several settings can be configured in the
+/etc/xdg/lxlauncher/settings.conf
+file, including button and icon size and background color (new!).
+Button and icon size are set and pixels.
+The R,G,B values for the background are set by entering a double
+between 0.0 and 256.0 for each of VIEWPORT_RED, VIEWPORT_GREEN,
+and VIEWPORT_BLUE. The background color cannot be changed
+by the systemwide Gtk+ theme or gtkrc file.

+The launcher can be themed according to the Gtk+ theming
+rules in the file:
+/etc/xdg/lxlauncher/gtkrc
+See http://live.gnome.org/GnomeArt/Tutorials/GtkThemes for more
+information. The current file sets only font and otherwise
+defaults to the systemwide Gtk+ theme.
diff --git a/gtkrc b/gtkrc
index 2ae1c47..5bf744c 100644
--- a/gtkrc
+++ b/gtkrc
@@ -1,19 +1,12 @@
-style "launcher-bg" { # for the background GtkWindow
-    bg[NORMAL] = "#3675AD"
-}
-style "launcher-fg" { # for the text size/color
+style "launcher-button-fg" { # for the button text size/color
     font_name="Sans Bold 11"
-    fg[NORMAL]="#3675AD"
-    fg[PRELIGHT]="#3675AD"
}
-style "launcher-nb" = "launcher-fg" { #for the notebook
-    bg[NORMAL] = "#ffffff"
-    #"bg[SELECTED] = "#3675AD"
-    fg[ACTIVE] = "#ffffff" #text color for non-active tabs
-    bg[ACTIVE] = "#3675AD" #the other non-active tabs
+
+style "launcher-tab-fg" { # for the notebook tab text size/color
+    font_name="Sans Bold 11"
}
-widget_class "*<GtkNotebook>" style "launcher-nb"
-widget_class "*<GtkNotebook><GtkHBox><GtkLabel>" style "launcher-nb"
-widget "GtkWindow" style "launcher-bg"
-widget_class "*<ExoWrapTable><GtkButton>*<GtkLabel>" style "launcher-fg"
-widget_class "*<GtkVBox><GtkHBox><GtkLabel>" style "launcher-fg"
+
+widget_class "*<GtkNotebook><GtkHBox><GtkLabel>" style "launcher-tab-fg"
+
+widget_class "*<ExoWrapTable><GtkButton>*<GtkLabel>" style "launcher-button-fg"
+widget_class "*<GtkVBox><GtkHBox><GtkLabel>" style "launcher-button-fg"
diff --git a/settings.conf.in b/settings.conf.in
index b10695e..44945e7 100644
--- a/settings.conf.in
+++ b/settings.conf.in
@@ -1,3 +1,7 @@
[Main]
BUTTON_SIZE=120
IMG_SIZE=48
+TAB_IMG_SIZE=1
+VIEWPORT_RED=256.0
+VIEWPORT_GREEN=256.0
+VIEWPORT_BLUE=256.0
diff --git a/src/lxlauncher.c b/src/lxlauncher.c
index 3a39bc6..df1bec2 100644
--- a/src/lxlauncher.c
+++ b/src/lxlauncher.c
@@ -2,6 +2,7 @@
  *      lxlauncher.c - Open source replace for EeePC Asus Launcher
  *
  *      Copyright 2008 PCMan <pcman.tw@gmail.com>
+ *      Modified 2010 Chris Harrington <chris@harrington.jp>
  *
  *      This program is free software; you can redistribute it and/or modify
  *      it under the terms of the GNU General Public License as published by
@@ -50,6 +51,8 @@

#define BUTTON_SIZE_FALLBACK 120
#define IMG_SIZE_FALLBACK 48
+// Added fallback default value to use for each of r, g, b for viewport background color
+#define VIEWPORT_COLOR_FALLBACK 128.0

static GtkWidget* main_window;
static GtkWidget* notebook;
@@ -68,6 +71,12 @@ static GKeyFile *key_file;

static gint button_size;
static gint img_size;
+// Added three global variables for viewport background color, double between 0.0 and 256.0
+static gdouble viewport_red;
+static gdouble viewport_green;
+static gdouble viewport_blue;
+// Notebook tab icon size, accepts int between 1 and 6
+static gint tab_img_size;

typedef struct _PageData{
     MenuCacheDir* dir;
@@ -264,6 +273,7 @@ static void add_app_btn( GtkWidget* table, MenuCacheApp* app )

static gboolean on_viewport_expose( GtkWidget* w, GdkEventExpose* evt, gpointer data )
{
+
     GObjectClass* oc = G_OBJECT_GET_CLASS(w);
     GtkWidgetClass* wc = (GtkWidgetClass*)g_type_class_peek_parent( oc );
     GdkPixmap* pixmap = (GdkPixmap*)data;
@@ -280,11 +290,12 @@ static gboolean on_viewport_expose( GtkWidget* w, GdkEventExpose* evt, gpointer
         //pat = cairo_pattern_create_linear( 0, gtk_adjustment_get_value(vadj), 0, w->allocation.height + gtk_adjustment_get_value(vadj) );
         //cairo_pattern_add_color_stop_rgb( pat, 0, 1, 1, 1);
         //cairo_pattern_add_color_stop_rgb( pat, 1.0, ((gdouble)184/256), ((gdouble)215/256), ((gdouble)235/256));
-//        cairo_rectangle(cr, 0, 0, w->allocation.width, w->allocation.height );
-//        cairo_rectangle(cr, evt->area.x, evt->area.y, evt->area.width, evt->area.height );
+        //cairo_rectangle(cr, 0, 0, w->allocation.width, w->allocation.height );
+        //cairo_rectangle(cr, evt->area.x, evt->area.y, evt->area.width, evt->area.height );
         cairo_rectangle(cr, evt->area.x, evt->area.y, evt->area.width, evt->area.height );
         //cairo_set_source(cr, pat);
-        cairo_set_source_rgb(cr, 184.0/256, 215.0/256, 235.0/256);
+        // Changed this to use the three new variables in the config file.
+        cairo_set_source_rgb(cr, viewport_red/256, viewport_green/256, viewport_blue/256);
         cairo_fill(cr);
         //cairo_pattern_destroy(pat);
         cairo_destroy(cr);
@@ -311,7 +322,6 @@ static gboolean on_scroll( GtkAdjustment* adj, PageData* data )
{
     // Dirty hacks used to force pseudo-transparent background
     gtk_widget_queue_draw( data->table );
-    return TRUE;
}

// Dirty hacks used to reduce unnecessary redrew during scroll
@@ -605,7 +615,7 @@ static void create_notebook_pages()
         g_signal_connect( adj, "value-changed", G_CALLBACK(on_scroll), page_data );

         // create label
-        image = gtk_image_new_from_icon_name( menu_cache_item_get_icon(dir), GTK_ICON_SIZE_MENU );
+        image = gtk_image_new_from_icon_name( menu_cache_item_get_icon(dir), tab_img_size );

         gtk_box_pack_start( label, image, FALSE, TRUE, 2 );
         gtk_box_pack_start( label, gtk_label_new( menu_cache_item_get_name(dir) ), FALSE, TRUE, 2 );
@@ -663,38 +673,18 @@ gchar* get_xdg_config_file(const char *name) {
     gchar *file;

     file = g_build_filename(user_dir, name, NULL);
-    if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE)
-    return file;
+    if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE) {
+ return file;
+    }
     free(file);

     for (dir = system_dirs; *dir; ++dir ) {
-        file = g_build_filename(*dir, name, NULL);
-        if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE)
-            return file;
-     free(file);
-    }
-    return NULL;
-}
-
-static void on_menu_cache_reload(MenuCache* mc, gpointer user_data)
-{
-    GMainLoop* mainloop = (GMainLoop*)user_data;
-    g_main_loop_quit(mainloop);
-}
-
-MenuCache* _menu_cache_lookup_sync( const char* menu_name )
-{
-    MenuCache* mc = menu_cache_lookup(menu_name);
-    /* ensure that the menu cache is loaded */
-    if(! menu_cache_get_root_dir(mc)) /* if it's not yet loaded */
-    {
-        GMainLoop* mainloop = g_main_loop_new(NULL, FALSE);
-        gpointer notify_id = menu_cache_add_reload_notify(mc, on_menu_cache_reload, mainloop);
-        g_main_loop_run(mainloop);
-        g_main_loop_unref(mainloop);
-        menu_cache_remove_reload_notify(mc, notify_id);
+ file = g_build_filename(*dir, name, NULL);
+ if (g_file_test(file, G_FILE_TEST_EXISTS) == TRUE) {
+     return file;
+ }
+ free(file);
     }
-    return mc;
}

int main(int argc, char** argv)
@@ -716,14 +706,13 @@ int main(int argc, char** argv)
     GError *error = NULL;
     gchar *config_file = get_xdg_config_file(CONFIG_FILE);
     if (config_file &&
-        g_key_file_load_from_file(key_file,
-                      config_file,
-                      G_KEY_FILE_NONE,
-                      &error)) {
-    printf("Loaded %s\n", config_file);
-    }
-    else {
-    perror("Error loading " CONFIG_FILE);
+ g_key_file_load_from_file(key_file,
+   config_file,
+   G_KEY_FILE_NONE,
+   &error)) {
+ printf("Loaded %s\n", config_file);
+    } else {
+ perror("Error loading " CONFIG_FILE);
     }
     if (config_file)
free(config_file);
@@ -733,23 +722,34 @@ int main(int argc, char** argv)
     // Add application specific properties
     gtk_settings_install_property(g_param_spec_boolean("lxlauncher-enable-key",
                             _("Enable key navigation"),
-                            _("Allow users to use up/down/left/right/tab/enter keys to operate the lxlauncher"),
+                            _("Allow users to use up/down/left/right/tab/enter keys to operate the lxlaucher"),
                             FALSE,GTK_ARG_READWRITE));
     // set up themes for notebook
     gchar* gtkrc_file = get_xdg_config_file("lxlauncher/gtkrc");
-    gtk_rc_parse(gtkrc_file);
+ // CCH change: put gtk_rc_parse inside the if. Program throws error if there is no gtkrc file
     if (gtkrc_file) {
-    free(gtkrc_file);
+ gtk_rc_parse(gtkrc_file);
+ free(gtkrc_file);
     }

     button_size = g_key_file_get_integer(key_file, "Main", "BUTTON_SIZE", NULL);
     img_size = g_key_file_get_integer(key_file, "Main", "IMG_SIZE", NULL);
+   
+    // Added read background color from the config file
+    viewport_red = g_key_file_get_double(key_file, "Main", "VIEWPORT_RED", NULL);
+    viewport_green = g_key_file_get_double(key_file, "Main", "VIEWPORT_GREEN", NULL);
+    viewport_blue = g_key_file_get_double(key_file, "Main", "VIEWPORT_BLUE", NULL);
+    // Added read tab image size from the config file
+    tab_img_size = g_key_file_get_integer(key_file, "Main", "TAB_IMG_SIZE", NULL);

     // to prevent from going without configure file
-    if(!button_size)
-        button_size = BUTTON_SIZE_FALLBACK;
-    if(!img_size)
-        img_size = IMG_SIZE_FALLBACK;
+    if(!button_size) button_size = BUTTON_SIZE_FALLBACK;
+    if(!img_size) img_size = IMG_SIZE_FALLBACK;
+    // added fallback for viewport background color and tab img size
+    if(!viewport_red) viewport_red = VIEWPORT_COLOR_FALLBACK;
+    if(!viewport_green) viewport_green = VIEWPORT_COLOR_FALLBACK;
+    if(!viewport_blue) viewport_blue = VIEWPORT_COLOR_FALLBACK;
+    if(!tab_img_size) tab_img_size = GTK_ICON_SIZE_MENU;

     icon_size = gtk_icon_size_register( "ALIcon", img_size, img_size );

@@ -780,14 +780,9 @@ int main(int argc, char** argv)
     gtk_container_add( (GtkContainer*)main_window, notebook );

     g_setenv("XDG_MENU_PREFIX", "lxlauncher-", TRUE);
-    menu_tree = _menu_cache_lookup_sync( "applications.menu" );
-    if(!menu_tree)
-    {
-        g_print("Unable to load application menu\n");
-        return 1;
-    }
-    root_dir = menu_cache_item_ref(menu_cache_get_root_dir( menu_tree ));
+    menu_tree = menu_cache_lookup( "applications.menu" );
     reload_notify_id = menu_cache_add_reload_notify( menu_tree, on_menu_tree_changed, NULL );
+    root_dir = menu_cache_ref(menu_cache_get_root_dir( menu_tree ));

     create_notebook_pages();

--
1.7.0.4


Сообщение объединено: 30 ноября 2013, 19:24:44

И еще можно скачать из ubuntu 12.04 (presize) lxlauncher+libmenu-cache3 (нужен как зависимость) и поставить их. Там уже пропатчено.

doctor@tardis

I-Jurij, вы просто не представляете, насколько я вам благодарен! Вы спасли несколько часов моей жизни! Если мы когда-нибудь пересечемся, с меня пиво!)

I-Jurij

Спасибо!
Заработало, то есть? Самому интересно.

doctor@tardis

I-Jurij, пока  не проверил.. как проверю, отпишусь