Date: Tuesday, August 11, 2015 @ 17:46:49
  Author: bgyorgy
Revision: 138246

upgpkg: lxdm 0.5.1-4

Apply more fixes from git

Modified:
  lxdm/trunk/PKGBUILD
  lxdm/trunk/git-fixes.patch

-----------------+
 PKGBUILD        |    7 -
 git-fixes.patch |  224 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 220 insertions(+), 11 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2015-08-11 14:52:31 UTC (rev 138245)
+++ PKGBUILD    2015-08-11 15:46:49 UTC (rev 138246)
@@ -6,7 +6,7 @@
 
 pkgname=lxdm
 pkgver=0.5.1
-pkgrel=3
+pkgrel=4
 pkgdesc='Lightweight X11 Display Manager'
 arch=('i686' 'x86_64')
 url="https://sourceforge.net/projects/lxdm/";
@@ -27,7 +27,7 @@
         lxdm.pam
         Xsession)
 md5sums=('9e03ce5f6d303bc9b689732401934dc6'
-         '8f514a4ba8fe204c8f0db293246dba3d'
+         '1290d9f6e1863fc69407a07be89d9f7e'
          'f0ae6c072f151104c53a030fd7757821'
          'c941ef896248bc7c03901b513490425c'
          '6ff73570368501a06ee7badc8e415d0a')
@@ -44,9 +44,6 @@
   # Use our custom pam and Xsession files
   cp ../lxdm.pam pam/lxdm
   cp ../Xsession data/Xsession
-
-  # Support for pulseaudio
-  echo 'test -x /usr/bin/pax11publish && /usr/bin/pax11publish -r' 
>>data/PostLogout.in
 }
 
 build() {

Modified: git-fixes.patch
===================================================================
--- git-fixes.patch     2015-08-11 14:52:31 UTC (rev 138245)
+++ git-fixes.patch     2015-08-11 15:46:49 UTC (rev 138246)
@@ -28,11 +28,151 @@
 +      color: #9E9D9B;
  }
 diff --git a/src/lxdm.c b/src/lxdm.c
-index 507189d..842f4b8 100644
+index 507189d..43a98c7 100644
 --- a/src/lxdm.c
 +++ b/src/lxdm.c
-@@ -1269,6 +1269,9 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
+@@ -886,26 +886,57 @@ static void put_lock(void)
+     g_free(lockfile);
+ }
+ 
++static int get_run_level(void)
++{
++#if defined(HAVE_UTMPX_H) && defined(RUN_LVL)
++      int res;
++      struct utmpx *ut,tmp;
++
++      setutxent();
++      tmp.ut_type=RUN_LVL;
++      ut=getutxid(&tmp);
++      if(!ut)
++      {
++              endutxent();
++              return '5';
++      }
++      res=ut->ut_pid & 0xff;
++      endutxent();
++      //g_message("runlevel %c\n",res);
++      return res;
++#else
++      return '5';
++#endif
++}
++
+ static void on_xserver_stop(void *data,int pid, int status)
+ {
+       LXSession *s=data;
+       LXSession *greeter;
+-
+-      g_message("xserver stop, restart. return status %x\n",status);
++      int level;
+ 
+       stop_pid(pid);
+       s->server = -1;
+       lxsession_stop(s);
++      
++      level=get_run_level();
++      if(level=='6' || level=='0')
++      {
++              return;
++      }
++      
++      g_message("xserver stop, restart. return status %x\n",status);
++
+       greeter=lxsession_find_greeter();
+       if(s->greeter || !greeter)
        {
+               s->greeter=TRUE;
+               xconn_close(s->dpy);
+               s->dpy=NULL;
+-              lxdm_startx(s);
+               ui_drop();
++              lxdm_startx(s);
+               ui_prepare();
+-              lxsession_set_active(greeter);
++              lxsession_set_active(s);
+       }
+       else
+       {
+@@ -914,7 +945,7 @@ static void on_xserver_stop(void *data,int pid, int status)
+       }
+ }
+ 
+-void lxdm_startx(LXSession *s)
++static void lxdm_startx(LXSession *s)
+ {
+       char *arg;
+       char **args;
+@@ -997,27 +1028,32 @@ static void exit_cb(void)
+       g_key_file_free(config);
+ }
+ 
+-static int get_run_level(void)
++static gboolean delayed_restart_greeter(LXSession *s)
+ {
+-#if defined(HAVE_UTMPX_H) && defined(RUN_LVL)
+-      int res=0;
+-      struct utmpx *ut,tmp;
+-
+-      setutxent();
+-      tmp.ut_type=RUN_LVL;
+-      ut=getutxid(&tmp);
+-      if(!ut)
++      int level;
++      
++      level=get_run_level();
++      if(level=='0' || level=='6')
+       {
+-              endutxent();
+-              return 5;
++              if(level=='0')
++                      
g_spawn_command_line_sync("/etc/lxdm/PreShutdown",0,0,0,0);
++              else
++                      
g_spawn_command_line_sync("/etc/lxdm/PreReboot",0,0,0,0);
++              g_message("run level %c\n",level);
++              lxdm_quit_self(0);
++              return FALSE;
+       }
+-      res=ut->ut_pid & 0xff;
+-      endutxent();
+-      //g_message("runlevel %c\n",res);
+-      return res;
+-#else
+-      return 5;
+-#endif
++      
++      if(s && s!=lxsession_greeter())
++      {
++              lxsession_free(s);
++      }
++      else if(!s)
++      {
++              lxsession_greeter();
++      }
++      
++      return FALSE;
+ }
+ 
+ static void on_session_stop(void *data,int pid, int status)
+@@ -1047,15 +1083,9 @@ static void on_session_stop(void *data,int pid, int 
status)
+                       
g_spawn_command_line_sync("/etc/lxdm/PreReboot",0,0,0,0);
+               g_message("run level %c\n",level);
+               lxdm_quit_self(0);
++              return;
+       }
+-      if(s && s!=lxsession_greeter())
+-      {
+-              lxsession_free(s);
+-      }
+-      else if(!s)
+-      {
+-              lxsession_greeter();
+-      }
++      g_timeout_add(300,(GSourceFunc)delayed_restart_greeter,s);
+ }
+ 
+ gboolean lxdm_get_session_info(const char *session,char **pname,char 
**pexec,char **pdesktop_names)
+@@ -1269,6 +1299,9 @@ void lxdm_do_login(struct passwd *pw, char *session, 
char *lang, char *option)
+       {
                if(s) lxsession_free(s);
                lxsession_set_active(prev);
 +              g_free(session_name);
@@ -41,7 +181,7 @@
                return;
        }
        if(!s) s=lxsession_find_idle();
-@@ -1514,7 +1517,7 @@ static void lxdm_signal_handler(void *data,int sig)
+@@ -1514,7 +1547,7 @@ static void lxdm_signal_handler(void *data,int sig)
        switch(sig){
        case SIGTERM:
        case SIGINT:
@@ -50,7 +190,7 @@
                lxdm_quit_self(0);
                break;
        default:
-@@ -1650,6 +1653,7 @@ static GString *lxdm_user_cmd(void *data,int user,int 
arc,char **arg)
+@@ -1650,6 +1683,7 @@ static GString *lxdm_user_cmd(void *data,int user,int 
arc,char **arg)
                if(p)
                {
                        res=g_string_new_len(p,len);
@@ -194,7 +334,7 @@
        while(file_get_line(cmd,sizeof(cmd),stdin)>=0)
        {
 diff --git a/src/xconn.c b/src/xconn.c
-index 5c62d4b..df4824f 100644
+index 5c62d4b..7e040b7 100644
 --- a/src/xconn.c
 +++ b/src/xconn.c
 @@ -172,7 +172,7 @@ void xconn_close(xconn_t c)
@@ -206,7 +346,71 @@
  static xcb_window_t xconn_get_root(xconn_t c)
  {
        const xcb_setup_t *setup;
-@@ -185,7 +185,7 @@ static xcb_window_t xconn_get_root(xconn_t c)
+@@ -181,11 +181,71 @@ static xcb_window_t xconn_get_root(xconn_t c)
+       xcb_screen_t *screen = iter.data;
+       return screen->root;
+ }
++
++static char *xconn_atom_name(xcb_connection_t *c,xcb_atom_t atom)
++{
++      xcb_get_atom_name_cookie_t cookie;
++      xcb_get_atom_name_reply_t *reply;
++      char *buf;
++      int len;
++      char *res=NULL;
++      cookie=xcb_get_atom_name(c,atom);
++      reply=xcb_get_atom_name_reply(c,cookie,NULL);
++      if(!reply)
++              return NULL;
++      buf=xcb_get_atom_name_name(reply);
++      len=xcb_get_atom_name_name_length(reply);
++      if(buf && len>0)
++      {
++              res=malloc(len+1);
++              memcpy(res,buf,len);
++              res[len]=0;
++      }
++      free(reply);
++      return res;
++}
++
++static void xconn_clear_props(xcb_connection_t *c,xcb_window_t w)
++{
++      xcb_list_properties_cookie_t cookie;
++      xcb_list_properties_reply_t *reply;
++      xcb_atom_t *atoms;
++      int i,len;
++      xcb_atom_t temp[16];
++      int temp_len=0;
++      cookie=xcb_list_properties(c,w);
++      reply=xcb_list_properties_reply(c,cookie,NULL);
++      if(!reply)
++              return;
++      len=xcb_list_properties_atoms_length(reply);
++      atoms=xcb_list_properties_atoms(reply);
++      for(i=0;i<len;i++)
++      {
++              int prop=atoms[i];
++              //if(prop<=68)
++              //      continue;
++              char *name=xconn_atom_name(c,prop);
++              if(!name)
++                      break;
++              if(!strcmp(name,"PULSE_SERVER") ||
++                      !strcmp(name,"PULSE_COOKIE"))
++              {
++                      temp[temp_len++]=prop;
++              }
++              free(name);
++      }
++      free(reply);
++      for(i=0;i<temp_len;i++)
++      {
++              xcb_delete_property_checked(c,w,temp[i]);
++      }
++}
++
+ #endif
  
  void xconn_clean(xconn_t c)
  {
@@ -215,3 +419,11 @@
        xcb_query_tree_cookie_t wintree;
        xcb_query_tree_reply_t *rep;
        xcb_window_t *children;
+@@ -201,6 +261,7 @@ void xconn_clean(xconn_t c)
+       for(i=0;i<len;i++)
+               xcb_kill_client(c->c,children[i]);
+       free(rep);
++      xconn_clear_props(c->c,root);
+       xcb_flush(c->c);
+ #endif
+ }

Reply via email to